在sockjs github页面上写的-cookie不能用于用户身份验证。我可以在其中阅读有关在sockjs中对用户进行身份验证的方法的示例,它是可取的。我不想使用socket.io。

最佳答案

您可以将基于令牌的方法用于redis和sockjs。在较高层次上,该过程可以像这样进行:


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


这里可能的陷阱是,您需要在每个连接请求中要求一个新令牌。否则,它将尝试使用相同的令牌。如果在验证一次令牌后将其删除,这将防止套接字重新连接。根据您的应用程序,这可能是所需的行为。这是给我们的,所以我们保留了原样,但这仍然值得一提。

关于node.js - 使用express和sockjs进行用户身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22489730/

10-10 20:04