gpt4 book ai didi

javascript - 如何在 Node.js 中正确实现 "forgot/reset password"功能? (使用一次性 token )

转载 作者:行者123 更新时间:2023-12-05 02:03:18 26 4
gpt4 key购买 nike

我正在使用 NestJs 在 Node.js 应用程序中实现忘记/重置密码功能。

这是一般流程:

  1. 用户在“忘记密码”表单中输入他的电子邮件并提交请求
  2. 服务器生成一个以用户 ID 作为负载的 jwt token ,然后发送一封电子邮件,以 token 作为重置密码的链接(例如:GET:example.com/reset/generated_jwt_token )
  3. 用户点击他的电子邮件中的链接,重设密码页面呈现,他用新密码填写表单并提交以密码作为正文的表单(例如:POST:example.com/reset/generated_jwt_token)
  4. 服务器验证 token (未过期 + 有效负载中的用户 ID 存在于数据库中)并更新密码。

这种方法的主要问题是可以无限次使用 jwt token 来重置密码(直到它在 X 分钟后过期)。

有办法解决吗?有人说将当前密码的哈希值作为有效负载,因为它无论如何都会被更改并保证使用 1 次,但我不喜欢这种方法。

编辑:我遇到的另一种方法是在 jwt token 的数据库中创建一个不能多次使用的黑名单集合。或者用同样的方式在redis中使用缓存,但它似乎不是很可扩展。

最佳答案

生成 token 后,您可以将其(或嵌入其中的独特内容)保存到该用户下的数据库中。然后,服务器验证 token :

(1) 当重置邮件中的链接被点击时

(2)当用户提交重设密码页面时

通过检查 token 是否与数据库中该用户的 token 相同。

此外,当用户成功更改密码时,从数据库中清除 token ,使其无法再次使用。

关于javascript - 如何在 Node.js 中正确实现 "forgot/reset password"功能? (使用一次性 token ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65312995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com