Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我们可以使用JWT进行会话管理吗?_Node.js_Reactjs_Express_Jwt_Express Jwt - Fatal编程技术网

Node.js 我们可以使用JWT进行会话管理吗?

Node.js 我们可以使用JWT进行会话管理吗?,node.js,reactjs,express,jwt,express-jwt,Node.js,Reactjs,Express,Jwt,Express Jwt,在我自己的应用程序中引入JWT之后。我面临一些问题,可能是我做得不对。请建议我最好的实施方式 技术堆栈:(MERN)MongoDB Expressjs React节点。 成功登录后,我将通过添加“用户id”来创建一个新的JWT令牌,并返回UI层。在UI端,我将该令牌存储在会话存储中。我正在使用此令牌处理对服务器的所有进一步请求。在进入控制器之前,我正在使用JWT verify检查中间件中的令牌是否有效。如果成功验证,则next()else将返回一个带有无效令牌的错误 现在发布accurs: 向用

在我自己的应用程序中引入JWT之后。我面临一些问题,可能是我做得不对。请建议我最好的实施方式

技术堆栈:(MERN)MongoDB Expressjs React节点。

成功登录后,我将通过添加“用户id”来创建一个新的JWT令牌,并返回UI层。在UI端,我将该令牌存储在会话存储中。我正在使用此令牌处理对服务器的所有进一步请求。在进入控制器之前,我正在使用JWT verify检查中间件中的令牌是否有效。如果成功验证,则next()else将返回一个带有无效令牌的错误

现在发布accurs:

  • 用户1注册
  • 使用用户1登录
  • 成功登录后,从会话存储复制令牌
  • 然后注销用户1
  • 向用户2注册
  • 使用用户2登录
  • 用户1的会话存储令牌粘贴到用户2
  • 刷新页面后,再次刷新用户1而不是用户2的仪表板
  • 以下两点的任何帮助或建议:

    • 我应该如何通过JWT管理用户会话
    • 我应该如何通过JWT管理API身份验证

    您不应该在浏览器会话中存储令牌,或者至少在注销时将其删除。令牌包含有关用户的所有信息以及验证令牌有效性的签名。如果您复制并存储它,它仍然有效。注销用户不会使令牌无效

    您应该向令牌添加一个到期日,使其仅在短时间内有效,但需要在无效之前每隔一段时间刷新它。通常的方法是使用一个刷新令牌,该令牌具有较长的间隔,可以防止用户一次又一次地登录

    当用户注销时,您应该停止从刷新令牌重新颁发访问令牌


    有关JWT的更多信息,请参阅。

    您不应该在浏览器会话中存储令牌,或者至少在注销时将其删除。令牌包含有关用户的所有信息以及验证令牌有效性的签名。如果您复制并存储它,它仍然有效。注销用户不会使令牌无效

    您应该向令牌添加一个到期日,使其仅在短时间内有效,但需要在无效之前每隔一段时间刷新它。通常的方法是使用一个刷新令牌,该令牌具有较长的间隔,可以防止用户一次又一次地登录

    当用户注销时,您应该停止从刷新令牌重新颁发访问令牌


    有关JWT的更多信息,请参阅。

    谢谢,Joachim,就我而言,我正在注销时删除令牌。您说过令牌到期时间应该减少,并定期调用重置,直到到期。但是有可能从编码的令牌中解码“exp”和“iat”值。事实上,您可以解码JWT令牌并读取类似“exp”的属性。当使用node.js时,我已经获得了感谢的最佳体验,Joachim,在我的例子中,我在注销时删除令牌。您说过令牌到期时间应该减少,并定期调用重置,直到到期。但是有可能从编码的令牌中解码“exp”和“iat”值。事实上,您可以解码JWT令牌并读取类似“exp”的属性。在使用node.js时,我已经获得了最好的体验,我认为,如果您想使用JWT令牌进行用户会话管理,那么您是不正确的,请参阅Carl von Blixen的答案和该答案中的链接。我认为,如果您想使用JWT令牌进行用户会话管理,那么您是不正确的,请参阅卡尔·冯·布利克森的答案和该答案中的链接。