チャットがあり、固有の接続を管理する必要があります。私は周りを検索しましたが、私が見つけた解決策はすべて廃止されたようです。
では、Socket.IO でソケットのセッション ID を取得するにはどうすればよいでしょうか?
私はNode.js、Express.js、およびSocket.IOを使用しています。
チャットがあり、固有の接続を管理する必要があります。私は周りを検索しましたが、私が見つけた解決策はすべて廃止されたようです。
では、Socket.IO でソケットのセッション ID を取得するにはどうすればよいでしょうか?
私はNode.js、Express.js、およびSocket.IOを使用しています。
Socket.IO 認証設定を使用して、Cookie を Express から Cookie パーサー ミドルウェアに渡します。Cookie が解析されると、クライアントのセッション ID を取得し、セッション ストアから関連付けられたセッションをフェッチできます。
// we need to use the same secret for Socket.IO and Express
var parseCookie = express.cookieParser(secret);
var store = /* your MemoryStore, RedisStore, etc */;
io.set('authorization', function(handshake, callback) {
if (handshake.headers.cookie) {
// pass a req, res, and next as if it were middleware
parseCookie(handshake, null, function(err) {
handshake.sessionID = handshake.signedCookies['connect.sid'];
// or if you don't have signed cookies
handshake.sessionID = handshake.cookies['connect.sid'];
store.get(handshake.sessionID, function (err, session) {
if (err || !session) {
// if we cannot grab a session, turn down the connection
callback('Session not found.', false);
} else {
// save the session data and accept the connection
handshake.session = session;
callback(null, true);
}
});
});
} else {
return callback('No session.', false);
}
callback(null, true);
});
クライアントが接続を試みるたびに、承認機能が実行されます。ハンドシェイク ヘッダー クッキー ( handshake.headers.cookies
) を受け取り、 に渡しますexpress.cookieParser()
。次に、Cookie パーサーはセッション ID を見つけ、store
関連するセッションを検索します。次に、関連付けられたセッションを に保存して、次のhandshake.session
ようにアクセスできるようにします。
app.get('/', function(req, res) {
req.session.property = 'a value';
});
io.sockets.on('connection', function(socket) {
var session = socket.handshake.session;
session.property // a value
});