【问题标题】:Sails, Sockets, and AuthorizationSails、套接字和授权
【发布时间】:2023-03-30 10:51:02
【问题描述】:

我想建立一个像whatsapp这样的聊天。 (每个用户都有一个联系人列表,他只能与他们交谈) 我的服务器身份验证基于 facebook 令牌。 而且我希望我的套接字身份验证是相同的。

目前的情况: -- 用户登录后,前端向我的sails 服务器发送一个socket 连接请求。 -- 在服务器“beforeConnect”功能中,我通过他的 fb 令牌找到用户。 -- 找到用户,socket连接成功。

问题:我需要在套接字上提供用户详细信息,这是因为我想找到他的聊天记录,并仅向他更新他的聊天记录和新消息。

这就是我的 beforeConnect 函数现在的样子。

P.S:不知道是否值得一提,但我在客户端使用的是 socket.io,而不是我在文档中看到的sails.io.js 来连接我的sails 服务器套接字。

【问题讨论】:

  • 有点晚了,但是...您需要控制器中的用户详细信息?根据我目前收集到的信息,您可以使用req.socket.getId() 用户,然后将其与会话数据一起关联到用户。根据我的阅读,似乎更好的方法是使用angular-tips.com/blog/2014/05/json-web-tokens-examples 中的策略(查找 api/policies/tokenAuth.js)。如果您每次都针对 FB 进行身份验证,这可能会很昂贵

标签: node.js sockets socket.io authorization sails.js


【解决方案1】:

onConnect 方法已被新版本弃用,您可以在连接事件上使用令牌进行授权,您必须在连接时存储令牌并检查其他侦听器进行身份验证,将此代码放在 config/bootstrap.js 中

module.exports.bootstrap = function(cb) { 

    // handle connect socket first event executes after logged in
    sails.io.on('connect', function (socket){
        // store facebook token here
    });

    // handle custom listener for other stuff
    sails.io.on('doSomeStuff', function (socket){
        // check facebook token match with requested token
    });
cb();
};

客户: 您可以在使用 facebook 登录后简单地发出“doSomeStuff”并在每个请求中传递令牌

【讨论】:

  • 非常感谢! - 目前我对每个请求进行授权,例如如果用户尝试连接 - 我处理他的 fb 令牌并让他连接。即使套接字已连接,每次请求我都会发送 fb 令牌,找到用户,然后继续控制器。每次都处理fb token就可以了吗?
  • 你好@TalGvili,对于身份验证用户,以下帖子为您提供有关如何管理令牌的更多信息
猜你喜欢
  • 1970-01-01
  • 2013-08-17
  • 2017-08-03
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2016-10-29
相关资源
最近更新 更多