如何在socket.io事件中访问快速会话?

我目前正在使用express和socket.io,并构build了一个只接受已经login的用户的socket.io连接的应用程序,我举了一个简单的例子。 请参阅io.sockets.on('连接')部分:

var express = require('express'); var app = express(); var http = require('http').createServer(app); var io = require('socket.io').listen(http); var sessionStore = new express.session.MemoryStore(); io.set('authorization', function (handshake, accept) { // I got this from a gist. // Don't know the link anymore, though. var cookies = require('express/node_modules/cookie').parse(handshake.headers.cookie); var parsed = require('express/node_modules/connect/lib/utils').parseSignedCookies(cookies, 'SESSION_SECRET'); sessionStore.get(parsed.sid, function (error, session) { if (error != null) { accept(error, false); return; } if (session != null && session.user != null) { accept(null, true); } else { accept('Not a logged in user.', false); } }); }); io.sockets.on('connection', function (socket) { // client with an user object in his session (= logged in) // connected. But how can I access this session in here? }); app.use(express.cookieParser('COOKIE_SECRET')); app.use(express.session({ secret: 'SESSION_SECRET', key: 'sid', store: sessionStore })); app.use(express.urlencoded()); app.use(express.json()); app.get('/', function (request, response) { response.sendfile('static/index.html'); }); app.post('/', function (request, response) { request.session.user = null; var post = request.body; if (post.username === 'admin' && post.password === 'admin') { request.session.user = post; } response.redirect('/'); }); http.listen(80); 

一切工作到这一点。 只有在会话中拥有用户的用户(=他们已经login)才能通过socket.io进行连接。 但是,我现在正处于客户真正这样做的阶段,因为在这一点上我无法获得一个会议。

有任何想法吗?

如果我已经理解了这个问题,那么你希望稍后用socket对象来expression会话。 你可以这样做:

 if (session != null && session.user != null){ accept(null, true); handshake.session = session; } 

你可以通过这样做来访问它:

 socket.handshake.session 

希望这会工作

你可以使用passport.socketio 。