基本上我想获得连接到socket.io的用户的UserID。
如果用户未登录,我将忽略套接字连接请求 - 否则我将以redis形式存储Passport用户ID和套接字连接ID。
我的问题是:如何从套接字对象中获取Passport用户?
答案 0 :(得分:0)
Here很好地解释了如何用Socket.IO实现身份验证,你读过这个吗?
答案 1 :(得分:0)
鉴于解决此问题的现有库无法与当前版本的Socket.io一起使用,我决定采用以下方法:
我正在使用MongoStore作为我的会话商店:
var sid = cookie.parse(socket.handshake.headers.cookie)['connect.sid'];
sessionStore.get(sid.split('.')[0].split(':')[1], function (err, session) {
if (session.passport.user) {
console.log('io found user logged in');
} else {
console.log('io found no user');
}
})
如果我发现用户已登录,我将在Redis中存储他们的userID和socket.io连接信息。当我需要向用户发送通知时,我将查询redis的userID并发出我找到的套接字ID。当用户断开连接时,我会删除其用户ID的条目。