【发布时间】:2017-01-26 17:28:28
【问题描述】:
我正在尝试为 Laravel 5.3 应用程序设置 Doctrine 2 Auth。我正在使用 Laravel 生成的 Auth 控制器,所以它不是我自己的自定义实现。我做了一些小改动(即使用 Doctrine 将用户持久保存到数据库)并让注册工作正常,但是当我尝试登录时,它一直未能通过身份验证。
我已经使用了一个调试器,它似乎一直在函数 hasValidCredentials(位于 vendor/laravel/framework/src/Illuminate/Auth/SessionGuard.php)上失败,详情如下:
/**
* Check the given plain value against a hash.
*
* @param string $value
* @param string $hashedValue
* @param array $options
* @return bool
*/
public function check($value, $hashedValue, array $options = [])
{
if (strlen($hashedValue) === 0) {
return false;
}
return password_verify($value, $hashedValue);
}
作为参考,我对 $value 和 $hashedValue 的值如下:
$value = "测试者";
$hashedValue = "$2y$10$ZSLRE3LAVA8myaH8mu6TNeumQxHdmKRbv/zZdFQeDujZ8JolshTOu";
根据我上次 XDebug 会话的变量屏幕截图显示了变量的确切类型:
$hashedValue 是密码“tester”的加密版本(使用 bcrypt),所以我知道凭据是 100% 正确的,但是当执行密码验证时,它总是评估为 false,然后 hasValidCredentials 检查失败。
所以我知道散列密码足够长并且存储在数据库中。我看到 $hashedValue 在双引号中返回,这可能是个问题吗?
尽管我无法登录,因为 Session Guard 类的尝试函数总是失败,因为 hasValidCredentials 总是返回 false,而且我很困惑,因为凭据是准确的。
想知道是否有人对如何解决此问题有任何想法?
谢谢
【问题讨论】:
-
似乎以下计算结果为真:
password_verify('secret password', '$2y$10$EnIi90KP.0BqCVJgK21BrO3xzArxCZaiAPaUebCw.K2Xw71QOCZv2'); -
请注意,我的应用密钥采用 base64 编码。这也会在生成哈希时引起问题吗?
标签: php laravel authentication laravel-5 doctrine-orm