我正在使用NestJ实现Node.js应用程序中的忘记/重置密码功能。
这就是一般的流程:
example.com/reset/generated_jwt_token)example.com/reset/generated_jwt_token)这种方法的主要问题是,可以无限地使用jwt令牌来重置密码(直到它在X分钟后过期)。
有办法解决这个问题吗?有人说,将当前密码的散列作为有效负载,因为它无论如何都会被更改,并保证一次使用,但我不喜欢这种方法。
编辑:我遇到的另一种方法是在jwt令牌的DB中创建一个黑名单集合,不能超过一次使用。或者在redis中使用缓存也是同样的方式,但它似乎没有很好的可伸缩性。
发布于 2020-12-15 20:15:55
生成令牌时,您可以将其保存到该用户下的数据库中(或该令牌中嵌入的唯一标记)。然后,服务器验证令牌:
(1)单击重置电子邮件中的链接
(2)当用户提交重置密码页时
通过检查令牌是否与数据库中该用户的令牌相同。
另外,当用户成功地更改他们的密码时,清除数据库中的令牌,这样它就不能再使用了。
https://stackoverflow.com/questions/65312995
复制相似问题