0

在 sockjs github 页面上写的 - cookie 不能用于用户身份验证。在哪里我可以阅读有关在 sockjs 中对用户进行身份验证的方法,最好举个例子。我不想使用 socket.io。

4

1 回答 1

4

您可以对 redis 和 sockjs 使用基于令牌的方法。在高层次上,该过程可以像这样工作:

  1. 客户端首先通过常规 HTTP 请求从服务器请求令牌(实现为 uuid)。这通过 express 的中间件路由请求,并提供对 cookie 和所有会话数据的轻松访问。
  2. 生成令牌时,它作为键值对存储在 redis 中,其中令牌是键,会话数据是值。
  3. 然后将令牌传递回用户,sockjs 客户端在发出初始连接“升级”请求时将其作为 GET 参数附加到 url。
  4. 当 sockjs 服务器接收到授权请求而不是验证 cookie 时,它​​会解析 url,弹出令牌,并尝试在 redis 中查询由令牌键入的键值对。如果 redis 查询失败或返回 null 数据,则您拒绝授权请求。如果 redis 请求成功,则您可以完全访问所有会话数据,现在您可以删除 redis 中的键值对。

一个可能的问题是您需要在每个连接请求上请求一个新令牌。否则,它会尝试使用相同的令牌。如果您在验证令牌后删除令牌,这将阻止套接字重新连接。根据您的应用程序,这可能是所需的行为。它是给我们的,所以我们保持原样,但它仍然值得了解。

于 2014-03-18T22:06:30.363 回答