Passport.js使用会话来反序列化用户并将其存储在express.js req
对象中。因此,要在Socket.io中对用户进行身份验证,您需要使用cookie查找会话,在会话存储中查找会话并最终从会话中获取用户。
您可以使用Socket.io middlewares来实现此目的。这里是一个伪代码,让你开始:
var io = require('socket.io')();
io.use((socket, next) => {
if (socket.request.headers.cookie) {
// find the session id in cookie
const sessionID = socket.request.headers.cookie['connect.sid']
// lookup the sessionID in session store
MongoStore.get(sessionID, (err, session) => {
// get the userID from the session
const userID = session.passport.user;
// Lookup user using the UserID
User.find(userID, (err, user) => {
//save the user in socket
socket.user = user;
next();
})
})
}
next(new Error('Authentication error'));
});
这太棒了。非常感谢你,绝对实现我想做的事情。 –