繁体   English   中英

Laravel身份验证hasValidCredentials失败

[英]Laravel Authentication hasValidCredentials failing

我正在尝试为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是密码“测试器”的加密版本(使用bcrypt),因此我知道凭据是100%正确的,但是当执行命中password_verify时,它始终计算为false,然后hasValidCredentials检查失败。

我将用户存储在数据库中,如下所示: 用户表设置

因此,我知道哈希密码足够长,并且存储在数据库中。 我看到$ hashedValue返回双引号,这可能是一个问题吗?

无论如何,我都无法登录,因为SessionGuard类的try函数始终会失败,因为hasValidCredentials始终返回false,并且由于凭据准确,我感到很困惑。

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

谢谢

password_verify是本机php函数,基本上与password_hash相对 以来

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

返回false ,则您的$hashedValue 不是 tester的加密值。

我的猜测是您以某种方式对密码进行了双重加密,例如,laravel组件和doctrine组件都在对密码值进行哈希处理。

请注意,如您在BcryptHasher中所见 ,laravel的app.key不用于加密密码,因此不会影响结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM