如何使用socket.io识别/验证用户

时间:2018-05-03 04:32:39

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

试图绕过一些逻辑。

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

我希望使用网络套接字进行持久身份验证的此功能,以便在游戏中使用#39;用户可以关闭浏览器并随时返回,当播放器断开/连接时,我可以转发给其他用户。玩家也可以加入和离开游戏,但显然一次只能在一个游戏中。

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

我是以错误的方式来做这件事的吗?我似乎无法找到类似于我想要的任何好的示例/文档。一些代码示例或启动应用程序将我推向正确的方向,以实现我想要实现的基本想法将是惊人的。

1 个答案:

答案 0 :(得分:0)

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

  

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

在您的情况下使用JWT的一种可能方式是这样的:

  1. 用户登录
  2. 成功登录时,服务器会发布新的JWT
  3. 此JWT被发送到客户端并存储在客户端(例如cookie,本地存储等)
  4. 在每个套接字连接事件上,客户端将此令牌发送到服务器以进行验证
  5. 服务器仅在验证提供的令牌时接受连接,否则关闭连接
  6. 使用JWT的主要优点是无需存储额外的数据服务器端,因为可以使用数字签名等加密方法验证令牌。

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