编辑:当然 OP 在他们的其他答案中是正确的;更重要的是,使用 socket.io >1.0 你可以使用socket.io-express-session。
原答案:
Socket.io 支持通过该io.set('authorization', callback)
机制进行授权。请参阅相关文档:授权。这是一个简单的示例(使用基于 cookie 的会话和连接/快速会话存储进行身份验证——如果您需要其他内容,只需实现另一个“授权”处理程序):
var utils = require('connect').utils;
// Set up a session store of some kind
var sessionId = 'some id';
var sessionStore = new MemoryStore();
// Make express app use the session store
app.use(express.session({store: sessionStore, key: sessionId});
io.configure(function () {
io.set('authorization', function (handshakeData, callback) {
var cookie = utils.parseCookie(handshakeData.headers.cookie);
if(!(sessionId in cookie)) {
return callback(null, false);
}
sessionStore.get(cookie[sessionId], function (err, session) {
if(err) {
return callback(err);
}
if(!('user' in session)) {
return callback(null, false);
}
// This is an authenticated user!
// Store the session on handshakeData, it will be available in connection handler
handshakeData.session = session;
callback(null, true);
});
});
});