2012-03-02 6 views
4

Node.jsには、マニュアルが不十分な、またはまったくない有用なモジュールを入手するための要点があるようです。 socket.ioはそのようなモジュールの1つです。名前空間に組み込みの認証機能を使用したいのですが、クライアント側でどのように動作するのかわかりません。サーバー側では、十分なドキュメントを提供していますが、それ以上のことはわかりません。socket.ioクライアント名前空間承認​​

EDIT:私はクライアントからのCookieデータを取得する方法を知っている必要はありません - 私は経由して、それを行う方法を知っているのではなく、クライアントから直接(例えば、ユーザ名&パスワード)のデータを渡す方法javascript。

答えて

3

Socket.IOと認証に関するまともなドキュメントがたくさんあります:https://github.com/LearnBoost/socket.io/wiki/Authorizing(「名前空間の認可」までスクロールし、「どのようにクライアントがグローバル権限を処理しない」)

は、特にあなたが達成しようとしていますか?あなたがSocket.IOを介してユーザー名/パスワードを「POST」しようとしているような感じです。

  • 「エミット」ユーザ名/パスワードの組み合わせ(あなたはTLSを使用している願っています)一般的な承認後にし、後にユーザーを切断:あなたが実行可能に次の操作を行うことができるようにSocket.IOの認証は、ハンドシェイク・フェーズ中に発生します

  • 不正な認証(IMO)おそらく、あなたのサーバー側のハンドシェイクデータに、ユーザーが認証されているかどうかを判断するために必要なものすべてが含まれている必要があります。ソケットに接続する前にHTTPセッションを認証してsocket.ioに接続しようとするたびにユーザー名とパスワードの組み合わせを送信しないようにすることができますXHRで)。そここれについてはかなりの数の記事がありますが、ここでは良いスタートだ:私はWebSocketをしguarenteedだ、と彼らはTLSしている。この特定のプロジェクトのためにhttp://www.danielbaulig.de/socket-ioexpress/

+1

。私のコードベースのほとんどはPHPであり、私はリアルタイム同期のためにNode.jsを使用しています。PHPとNode.jsの両方でアクセスできるようにセッションCookieを変更する必要はありません。 – skeggse

+0

必ずしもセッションクッキーを変更する必要はありません。分散セッションストア(Redisなど)を使用している場合は、ストアに対して直接照会することができます。例: 'io.of( '/ private')。承認(機能(handshakeData、コールバック){ )セッションストア.get(cookie ['sid']、function(err、session){ if(err || !セッション){ コールバック( 'エラー'、偽);} 他{=セッション data.session; コールバック(NULL、TRUE);} }); }); ' –

+1

あなたがいないようですこれには2つの問題があります。まず、私はセッションクッキーを使用していません、そして、第二に、PHPで書かれたセッションクッキーのためのこのプロジェクトの別の部分のためのフレームワークを持っています。 – skeggse