Socket.io和Passport - 在套接字连接上获取护照userID?

时间:2015-04-27 16:34:59

标签: node.js sockets

基本上我想获得连接到socket.io的用户的UserID。

如果用户未登录,我将忽略套接字连接请求 - 否则我将以redis形式存储Passport用户ID和套接字连接ID。

我的问题是:如何从套接字对象中获取Passport用户?

2 个答案:

答案 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的条目。