我正在实现密码重置功能。只有管理员才能在不知道当前密码(或新用户)的情况下重置某人的密码。
管理员将点击重置密码,这将生成一个 40 个字符的令牌。令牌将使用 Bcrypt 进行哈希处理并存储在数据库中,然后非哈希令牌将通过电子邮件发送给用户 /resetPassword/tok=?
用户单击链接后,必须验证令牌。我只是想知道您如何从链接中验证令牌。我知道如何检查它是否已被使用,或者是否已过期(48 小时)。但是您如何验证它来自该电子邮件的该用户?
谢谢!
我正在实现密码重置功能。只有管理员才能在不知道当前密码(或新用户)的情况下重置某人的密码。
管理员将点击重置密码,这将生成一个 40 个字符的令牌。令牌将使用 Bcrypt 进行哈希处理并存储在数据库中,然后非哈希令牌将通过电子邮件发送给用户 /resetPassword/tok=?
用户单击链接后,必须验证令牌。我只是想知道您如何从链接中验证令牌。我知道如何检查它是否已被使用,或者是否已过期(48 小时)。但是您如何验证它来自该电子邮件的该用户?
谢谢!
您无法知道 URL 是如何被调用的。它可能是由用户单击电子邮件中的链接而发生的,也可能是由黑客/机器人生成并由软件或工具提交的。
您可以做的是确保您用作目标的电子邮件经过验证。大多数 Web 应用程序作为用户在激活用户帐户之前验证他们的电子邮件帐户(向用户发送一封电子邮件,带有令牌和用户 ID,并且用户单击电子邮件中提供的 URL)。这是您了解电子邮件实际上属于用户的方式。
当然,您生成的每个令牌都与预期的用户 ID 一起保存在一个表中。您的代币也可能有到期日。
这篇博文是保护用户登录的绝佳参考,我强烈推荐它:
https://www.troyhunt.com/everything-you-ever-wanted-to-know/