【问题标题】:How to identify/authenticate users with socket.io如何使用 socket.io 识别/验证用户
【发布时间】:2018-05-03 04:32:39
【问题描述】:

试图围绕一些逻辑来思考。

我正在使用 Node.js 和 Socket.io 创建一个简单的回合制游戏。这个想法是每个用户通过一些框架前端系统(快速 RubyOnRails 脚手架)“登录”,然后一旦他们登录,他们就可以刷新页面并关闭浏览器,并且他们照常保持登录状态,直到他们注销.

我想要这种使用网络套接字进行持久身份验证的功能,以便在“游戏内”用户可以关闭浏览器并随时返回,并且我可以在玩家断开/连接时中继给其他用户。玩家也可以加入和离开游戏,但显然一次只能进入一个游戏。

我的猜测是,在每个页面加载时,用户连接的新 socket.id 可能需要存储在用户表内的数据库中?或者有没有更简单的方法将当前用户绑定到 socket.id?

我是不是走错了路?我似乎找不到任何与我想要的类似的好例子/文档。一些代码示例或入门应用程序可以将我推向正确的方向以实现我想要完成的基本想法,这将是惊人的。

【问题讨论】:

    标签: ruby-on-rails node.js socket.io


    【解决方案1】:

    您可以为此目的使用令牌。一个不错的选择是使用 JSON Web Tokens (JWT)。

    JSON Web Token (JWT) 是一种开放标准,它定义了一种紧凑且自包含的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。 此信息经过数字签名,因此可以验证和信任。 JWT 可以使用密钥(使用 HMAC 算法)或使用 RSA 的公钥/私钥对进行签名。
    - https://jwt.io

    在您的案例中使用 JWT 的一种可能方式如下:

    1. 用户登录
    2. 成功登录时服务器会发出新的 JWT
    3. 此 JWT 被发送到客户端并存储在客户端(例如 cookie、本地存储等)
    4. 在每个套接字连接事件中,客户端都会将此令牌发送到服务器进行验证
    5. 服务器仅在提供的令牌经过验证时才接受连接,否则关闭连接

    使用 JWT 的主要优点是无需在服务器端存储额外的数据,因为可以使用数字签名等加密方法验证令牌。


    有关 JWT 的更多信息:https://jwt.io

    【讨论】:

    • 嘿,这很有趣,我不知道这项技术。似乎是正确的方向。我将不得不做更多的研究,看看我能做些什么。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 2011-09-24
    • 2021-11-18
    • 2010-10-18
    • 2013-11-02
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多