Laravel 5.5 - 密码重置令牌与存储在数据库中的内容不同

时间:2018-05-25 15:07:29

标签: hash laravel-5.5 reset-password

有人可以向我解释为什么密码重置令牌在重置链接中与密码重置表中存储的内容不同?

重置链接中的令牌:

 http://localhost/user/password/reset/4b8b52e26384474534cf3c62ed9b9908d286f5dcceac5267208c6df88983a5d8

password_reset表中的令牌:

$2y$10$Wvl6eh/pFn2CRm8BkgXj1u5S5FWOiwUnPf9R3SH1t9ZjjdA0C7i7u

我已经搜索了源头以使其产生头或尾,但无法弄清楚令牌是如何进行哈希处理以生成链接中显示的令牌。

在password_reset表中,它创建如下(src / illuminate / auth / passwords / DatabaseTokenRepository.php):

public function createNewToken()
{
    return hash_hmac('sha256', Str::random(40), $this->hashKey);
}

然后检查它是否是有效令牌,它使用以下方法:

public function exists(CanResetPasswordContract $user, $token)
{
    $record = (array) $this->getTable()->where(
        'email', $user->getEmailForPasswordReset()
    )->first();

    return $record &&
           ! $this->tokenExpired($record['created_at']) &&
             $this->hasher->check($token, $record['token']);
}

所以要重新讨论这个问题,用什么代码来转换重置链接中显示的令牌?

0 个答案:

没有答案