我在Express 4中使用Socket.io。
Socket.io有一些中间件,允许您在注册连接事件之前验证套接字请求。
我遇到的问题是socket.request.cookies没有定义。因此,我注册的错误是“没有cookie传输”,如下所示。
这个新的中间件看起来像这样:
io.use(function (socket, next) {
var handshakeData = socket.request;
//var handshakeData = socket.handshake || socket.request;
if (handshakeData.headers.cookie && handshakeData.cookie) {
handshakeData.cookie = cookie.parse(handshakeData.headers.cookie);
handshakeData.sessionID = cookie.parse(handshakeData.cookie['express.sid'], 'foo'); //pass session secret at end
if (handshakeData.cookie['express.sid'] == handshakeData.sessionID) {
return next(new Error('Cookie is invalid.'), false);
}
} else {
return next(new Error('No cookie transmitted.'), false); //I am failing here
}
return next(null, true);
});
像我说的那样,问题是handshakeData.cookie = socket.handshake.cookie是未定义的。我认为需要定义此值才能使身份验证正常工作。知道什么可能是错的吗?