可能重复:
忘记密码:实现忘记密码功能的最佳方法是什么?
我正在为 Web 应用程序实现忘记密码。用户将收到一封邮件,其中包含指向该网页的链接以输入新密码。我想将链接的有效期限制为自创建以来最多 24 小时。我应该如何实现这个?我应该如何生成此参数,以便不重复使用相同的链接或无法修改链接并重复使用它?
不确定这是否有帮助,但我使用的是 Spring 3.1 框架。
可能重复:
忘记密码:实现忘记密码功能的最佳方法是什么?
我正在为 Web 应用程序实现忘记密码。用户将收到一封邮件,其中包含指向该网页的链接以输入新密码。我想将链接的有效期限制为自创建以来最多 24 小时。我应该如何实现这个?我应该如何生成此参数,以便不重复使用相同的链接或无法修改链接并重复使用它?
不确定这是否有帮助,但我使用的是 Spring 3.1 框架。
对于此类功能,您需要创建一个基于时间戳的随机令牌并将其与忘记密码链接一起发送。您需要按照以下提到的步骤操作
为了更安全,您可以创建更多步骤以确保链接来自有效用户并且未被黑客入侵。
常见的方法是在您的 url 中包含生成的 id。该 id 将与提交的日期一起保存在 db 中,无论是创建日期还是过期时间。这样你就可以创建一个后台任务来清除你过期的 id。
我会做的是:
优点:
一旦用户请求新密码,生成一些随机令牌,例如使用RandomStringUtils.randomAlphanumeric(int)
. 将此令牌存储在与请求密码重置的用户 ID 关联的数据库中。还存储创建时的时间戳。
通过电子邮件向用户发送链接。此链接应包含您刚刚创建的令牌作为 URL 的一部分。
用户进入此链接后,系统会要求她输入新密码。如果您担心链接可能会泄露,还请询问一些个人详细信息(电子邮件、名字等)
在服务器端,您:
查找令牌和与该令牌关联的用户 ID
通过比较当前日期确保令牌仍然有效
存储散列的新密码