我使用Laravel身份验证系统向所有新用户发送欢迎电子邮件。通常情况下,它可以正常工作,但是我遇到了一些孤立的事件,我收到“密码重置令牌无效”错误。
为了进行诊断,我希望能够将用户URL中提供的字符串(即我通过电子邮件发送给他们的令牌)与password_resets.token
字段中存储的值进行手动比较。我该怎么办?
URL中的令牌似乎是64个十六进制字符。数据库中的令牌以$2y$10$
开头,因此我假设它是password_hash
函数的输出。如何从一个翻译成另一个?
答案 0 :(得分:0)
首先,我想说的是URL中的标记不是password_hash
函数的输出。
要比较URL中的令牌以及生成或存储的令牌,可以从数据库中进行检查。检查password_resets
表,检查用户的电子邮件,搜索与该电子邮件地址相对应的令牌。
URL中的令牌应该与电子邮件地址的数据库中的令牌相同。
答案 1 :(得分:0)
另一种方法是检查一个是否与另一个等效(这意味着,如果一个是另一个的哈希/未哈希版本)。为此,您可以使用Hash :: check()函数。来自docs:
验证哈希密码
check方法使您可以验证给定的纯文本字符串是否与给定的哈希相对应。但是,如果您使用的是Laravel随附的
LoginController
,则可能不需要直接使用它,因为此控制器会自动调用此方法:if (Hash::check('plain-text', $hashedPassword)) { // The passwords match... }