2

可能重复:
忘记密码:实现忘记密码功能的最佳方法是什么?

我正在为 Web 应用程序实现忘记密码。用户将收到一封邮件,其中包含指向该网页的链接以输入新密码。我想将链接的有效期限制为自创建以来最多 24 小时。我应该如何实现这个?我应该如何生成此参数,以便不重复使用相同的链接或无法修改链接并重复使用它?

不确定这是否有帮助,但我使用的是 Spring 3.1 框架。

4

4 回答 4

1

对于此类功能,您需要创建一个基于时间戳的随机令牌并将其与忘记密码链接一起发送。您需要按照以下提到的步骤操作

  1. 当用户忘记密码时创建一个随机令牌并将其保存在数据库中并具有到期时间。
  2. 通过电子邮件将嵌入了令牌的链接发送给用户。
  3. 当用户点击链接时,首先检查令牌过期时间,如果过期可以向用户显示消息。
  4. 如果令牌未过期,则允许用户更改密码并可以将令牌状态设置为无效。

为了更安全,您可以创建更多步骤以确保链接来自有效用户并且未被黑客入侵。

于 2012-09-30T07:56:20.203 回答
0

常见的方法是在您的 url 中包含生成的 id。该 id 将与提交的日期一起保存在 db 中,无论是创建日期还是过期时间。这样你就可以创建一个后台任务来清除你过期的 id。

于 2012-09-30T07:56:39.653 回答
0

我会做的是:

  • 重置用户密码(随机值),有效期为 now + 24h
  • 向用户发送新密码,其中包含指向“更改密码”页面的链接

优点:

  • Spring Security 会处理过期问题
  • 如果我“窃取”指向“更改密码”页面的链接,那将一文不值:用户需要输入当前密码和新密码(两次)
于 2012-09-30T07:57:02.450 回答
0
  1. 一旦用户请求新密码,生成一些随机令牌,例如使用RandomStringUtils.randomAlphanumeric(int). 将此令牌存储在与请求密码重置的用户 ID 关联的数据库中。还存储创建时的时间戳。

  2. 通过电子邮件向用户发送链接。此链接应包含您刚刚创建的令牌作为 URL 的一部分。

  3. 用户进入此链接后,系统会要求她输入新密码。如果您担心链接可能会泄露,还请询问一些个人详细信息(电子邮件、名字等)

  4. 在服务器端,您:

    1. 查找令牌和与该令牌关联的用户 ID

    2. 通过比较当前日期确保令牌仍然有效

    3. 存储散列的新密码

于 2012-09-30T07:57:53.343 回答