php - Laravel - 哈希器/重置密码问题

标签 php mysql laravel hash

我已将重置密码问题追溯到 DatabaseTokenRepository 中的 hasher 方法。

当它比较两个 token 哈希值(一个从用户的重置请求中获得的哈希值和一个从数据库中获得的哈希值)时,无论如何都会失败。我已经尝试从数据库中直接复制粘贴并以这种方式比较两个字符串,但它仍然返回 false。

我正在使用 Laravel 5.4

用户 token (来自重置邮件)

"$2y$10$xAnDTr6/G41sAROp4h76hOhx7c4Ily4eYBtFc1J4voCgwIRhq9Mge"

数据库 token

"$2y$10$xAnDTr6/G41sAROp4h76hOhx7c4Ily4eYBtFc1J4voCgwIRhq9Mge"

哈希函数的返回值仍然是false

来自 DatabaseTokenRepository 的代码

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

    //dump($token);
    //dump($record['token']);
    //dd($this->hasher->check($token, $record['token']));

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

编辑: 使用 hash_equals($token, $record['token']); 返回 true,但这不是解决方案(因为这是源文件,对这些文件的更新会破坏我的功能)

最佳答案

我搞砸了,我没有使用预期的 hash_hmac 哈希,而是使用了数据库中的哈希两次 - 这导致它每次都失败,因为 password_verify 函数需要值而不是哈希。

对于遇到相同问题的任何人,我建议您查看您通过电子邮件发送给用户的内容,这是我从数据库中获取 token 而不是通过 Controller 传递 token 的地方。

关于php - Laravel - 哈希器/重置密码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46294896/

相关文章:

PHP - 大整数模计算

php - 如何获取所有关注帖子的用户

python - 导入 MySQLdb 在 python 中不起作用

Laravel 查询生成器 - 删除或修改连接

laravel - Laravel 中的 attach() 方法有什么用?

php - Laravel 5.7 - 队列作业太慢

PHP:带双引号的 htmlspecialchars_decode 不起作用

php - Magento:如何在我的 Magento 扩展程序中包含 “debug flag”?

php - 在准备新的 php mysqli stmt 之前什么时候必须关闭它?

sql - MySQL SELECT x FROM a WHERE NOT IN (SELECT x FROM b) - 意外结果