Laravel身份验证hasValidCredentials失败

时间:2017-01-26 17:28:28

标签: php laravel authentication laravel-5 doctrine-orm

我正在尝试为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 =“tester”;
  $ hashedValue =“$ 2y $ 10 $ ZSLRE3LAVA8myaH8mu6TNeumQxHdmKRbv / zZdFQeDujZ8JolshTOu”;

根据我上次的XDebug会话,变量的屏幕截图显示了变量的确切类型:

credential values

$ hashedValue是密码“tester”的加密版本(使用bcrypt),因此我知道凭据是100%正确的,但是当执行命中password_verify时,它总是计算为false,然后hasValidCredentials检查失败。

我在我的数据库中按如下方式存储我的用户: user table setup

所以我知道散列密码足够长并存储在数据库中。我看到$ hashedValue以双引号返回,这可能是个问题吗?

无论我无法登录,因为Session Guard类的尝试功能总是失败,因为hasValidCredentials始终返回false,因为凭据准确无误,我感到非常难过。

想知道是否有人对如何解决这个问题有任何想法?

由于

1 个答案:

答案 0 :(得分:1)

password_verify是一个原生的php函数,基本上是password_hash的对应物。因为

password_verify('tester', '$2y$10$ZSLRE3LAVA8myaH8mu6TNeumQxHdmKRbv/zZdFQeDujZ8JolshTOu');

返回false,您的$hashedValue 加密值为tester

我的猜测是你以某种方式加密了你的密码,例如:您的laravel组件和您的doctrine组件都会散列密码值。

请注意,laravel的app.key不用于加密密码,您可以在BcryptHasher中看到,因此它不会影响结果。