あなたのサーバに保存することができます知っている(それはマルチユーザです)。したがって、特定のユーザーからの特定の要求にない場合、単一の「現在の」ユーザーまたは「ログインした」ユーザーは存在しません。
リクエストを処理するときには、特定のユーザーのために何かをしているだけなので、そのリクエストに関連付けられた特定のユーザーがいます。
ログインの仕方によっては、現在ログインしているすべてのユーザーがいる種類のセッションストアがある場合があります。現在ログインしているユーザーは、通常、要求の中で(その要求のための)セッションCookieを見て、セッションストアからユーザー情報を取得するためにそのセッションCookieをローカルセッションストアで検索することによって、要求内で認識されます。
ユーザー情報を欲しいポイントはsocket.io接続の確立にある場合は、socket.io接続がclient.request.headers.cookie
を介して確立された時点でクッキーへのアクセスを得ることができます。クッキーを使用すると、ログインセッションを取得し、必要な他のセッション情報にアクセスできるようになります(通常のhttpリクエストと同じです)。
io.on('connection', function(client) {
var cookie = client.request.headers.cookie;
// using the cookie, you should then be able to get to your login session
// using the session, you should be able to get to any other login data
});
覚えておくべき概念事は(のWebSocketに基づいています)socket.io接続の作成は、常に(当時のWebSocket接続にアップグレードするプロトコルです)通常のHTTPリクエストを開始することです。したがって、その時点ではすべての通常のHTTPのもの(Cookie、ヘッダーなど)が利用可能です。
上記のCookieを設定するユーザー認証をまだ実装していない場合は、socket.io接続を作成する前にユーザーを認証させる必要があります(アクセス時にCookieが存在するため) socket.ioミドルウェア経由でサポートされているsocket.io接続プロセスの一部としてユーザー認証を実装する必要があります。
パスポートからCookieにアクセスできない場合は、How to access Cookie set with Passport.jsをご覧ください。
このモジュールが役に立ちます。 https://github.com/lmaccherone/node-localstorageしかし、リクエストやミドルウェアを使わずにどのユーザーがログインしているかを知るにはどうすればいいですか? –
実際に私はリクエスト/ミドルウェアを呼び出さずにユーザーの日付を必要としています。このようなリクエスト/ミドルウェアの外に私のsocket.ioを入れてください。 –
@AliciaBrandon - 'io.on( '接続 '、...) 'は、ユーザーのリクエスト内にあります(これは、あなたの質問の情報が欲しい場所です)。これはsocket.io接続の開始です。ソケットが 'client.request.headers.cookie'によって接続された時点で、現在の接続のクッキーにアクセスすることができます。クッキーから、セッションストアのログイン情報にアクセスできるはずです。 – jfriend00