具有授权的Node.js + socket.io + mongo

时间:2013-05-23 07:47:11

标签: node.js mongodb authentication cookies socket.io

在我的网站上,用户需要使用数据库帐户登录。我的问题是,如果数据库登录通过并在cookie中创建我的变量,如何auth socket.io?

使用身份验证功能从socket.io Auth快速使用sessionID,也许我可以阻止在用户登录数据库时提供sessionID?

1 个答案:

答案 0 :(得分:0)

使用authorization function

io.set('authorization', function (handshakeData, callback) {
  // findDatabyip is an async example function
  findDatabyIP(handshakeData.address.address, function (err, data) {
    if (err) return callback(err);

    if (data.authorized) {
      handshakeData.foo = 'bar';
      for(var prop in data) handshakeData[prop] = data[prop];
      callback(null, true);
    } else {
      callback(null, false);
    }
  }) 
});
  • 将findDatabyIP替换为数据库查找。
  • 您在handshakeData上设置的任何属性都应该通过socket.handshake.sessionID在“连接”处理程序中可用。
  • 完成后调用回调,并显示错误消息(如果适用),如果连接已获得授权,则为true;如果不是,则为false。
  • 解析和阅读会话的cookie可能很困难。 This discussion (especially jugglinmike's post)可能有帮助。