【问题标题】:Laravel 5: Diagnose password reset token is invalid errorLaravel 5:诊断密码重置令牌无效错误
【发布时间】:2019-04-11 11:27:11
【问题描述】:
我使用 Laravel 身份验证系统向所有新用户发送欢迎电子邮件。大多数情况下它工作正常,但我遇到了一些孤立的事件,我得到“密码重置令牌无效”错误。
为了诊断此问题,我希望能够手动将用户 URL 中提供的字符串(即我通过电子邮件发送给他们的令牌)与存储在 password_resets.token 字段中的值进行比较。我该怎么做?
URL 中的标记似乎是 64 个十六进制字符。数据库中的令牌以$2y$10$ 开头,所以我假设它是password_hash 函数的输出。如何从一个翻译到另一个?
【问题讨论】:
标签:
laravel
laravel-authentication
【解决方案1】:
另一种方法是检查一个是否等同于另一个(这意味着,如果一个是另一个的散列/未散列版本)。为此,您可以使用 Hash::check() 函数。来自docs:
根据哈希验证密码
check 方法允许您验证给定的纯文本字符串是否对应于给定的哈希值。但是,如果你使用 Laravel 中包含的 LoginController,你可能不需要直接使用它,因为这个控制器会自动调用这个方法:
if (Hash::check('plain-text', $hashedPassword)) {
// The passwords match...
}
【解决方案2】:
首先我想说,URL中的token并不是password_hash函数的输出。
要比较 URL 中的令牌和生成或存储的令牌,您可以从数据库中进行检查。检查password_resets 表,检查用户的电子邮件,搜索与该电子邮件地址对应的令牌。
URL 中的令牌应与电子邮件地址数据库中的令牌相同。