1

我使用 Laravel 身份验证系统向所有新用户发送欢迎电子邮件。大多数情况下它工作正常,但我遇到了一些孤立的事件,我得到“密码重置令牌无效”错误。

为了诊断这一点,我希望能够手动将用户 URL 中提供的字符串(即我通过电子邮件发送给他们的令牌)与password_resets.token字段中存储的值进行比较。我怎样才能做到这一点?

URL 中的令牌似乎是 64 个十六进制字符。数据库中的标记以 开头$2y$10$,所以我假设它是password_hash函数的输出。我怎样才能从一个翻译到另一个?

4

2 回答 2

0

首先我想说URL中的token不是password_hash函数的输出。

要比较 URL 中的令牌和生成或存储的令牌,您可以从数据库中进行检查。检查password_resets表格,检查用户的电子邮件,搜索与该电子邮件地址对应的令牌。

URL 中的令牌应与电子邮件地址数据库中的令牌相同。

于 2018-11-07T23:54:49.347 回答
0

另一种方法是检查一个是否等同于另一个(这意味着,如果一个是另一个的散列/未散列版本)。为此,您可以使用 Hash::check() 函数。从文档

针对哈希验证密码

check 方法允许您验证给定的纯文本字符串是否对应于给定的哈希值。但是,如果你使用LoginControllerLaravel 中包含的,你可能不需要直接使用它,因为这个控制器会自动调用这个方法:

if (Hash::check('plain-text', $hashedPassword)) {
    // The passwords match...
}
于 2018-11-08T00:58:48.290 回答