0

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

Express with auth function from here socket.io Auth与 sessionID 一起使用,也许我可以阻止在用户登录数据库时将 sessionID 提供给用户?

4

1 回答 1

0

使用授权功能

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 可能很困难。这个讨论(尤其是 jugglinmike 的帖子)可能会有所帮助。
于 2013-05-31T05:22:41.710 回答