Expressjs中的Socketio授权功能

时间:2013-11-22 14:42:05

标签: node.js angularjs express websocket socket.io

我非常菜鸟,我有这个功能来进行授权。

io.set('authorization', function (handshakeData, accept) {
  // check if there's a cookie header
    if (req.session.user) {
        accept(null, true);
    }else{res.redirect("/");
        accept("NO AUTORIZADO!", false);

    }



    }); 
    next()
}); 

我希望在连接websockets之前在会话中对用户进行身份验证

2 个答案:

答案 0 :(得分:1)

假设您使用express with redis作为会话存储,您可以使用以下代码验证会话。

var cookie = require('cookie'),
    connect = require('connect');

io.set('authorization', function (handshakeData, accept) {
if (handshakeData.headers.cookie) {
    handshakeData.cookie = cookie.parse(handshakeData.headers.cookie);
    handshakeData.sessionID = 'sess:'+connect.utils.parseSignedCookie(handshakeData.cookie['connect.sid'], config.session_secret);
    sredis.get(handshakeData.sessionID, function (err, session) {
        if (err || !session) {
            accept('could not load the session', false);
        } else {
            handshakeData.session = JSON.parse(session);
            accept(null, true);
        }
    });
} else {
    return accept('No cookie transmitted.', false);
}
});

答案 1 :(得分:0)

用于对使用http://passportjs.org/

的快速用户进行身份验证

然后您可以使用https://github.com/jfromaniello/passport.socketio进行socket.io通信