2017-01-26 4 views
0

Я пытаюсь настроить Doctrine 2 Auth для приложения Laravel 5.3. Я использую Laravel сгенерированные Auth-контроллеры, поэтому это не моя собственная реализация. Я сделал несколько небольших изменений (а именно для сохранения пользователя в базе данных с помощью Doctrine) и получил регистрацию, однако, когда я пытаюсь войти в систему, она продолжает терпеть неудачу при аутентификации.Laravel Аутентификация hasValidCredentials сбой

Я прошел через с помощью отладчика и это, кажется, последовательно неудачу на функции hasValidCredentials (находится на поставщика/Laravel/рамочный/SRC/Осветите/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); 
    } 

Для справки, мои значения $ стоимости и $ hashedValue следующим образом:

$ значение = "тестер";
$ hashedValue = "$ 2y $ 10 $ ZSLRE3LAVA8myaH8mu6TNeumQxHdmKRbv/zZdFQeDujZ8JolshTOu";

Скриншот из переменных, как в моей последней сессии XDebug показывает точный тип переменных:

credential values

в $ hashedValue является зашифрованная версия (с использованием Bcrypt) пароля «тестер «поэтому я знаю, что учетные данные на 100% правильны, но когда выполнение вызывает password_verify, оно всегда оценивается как false, а затем проверка hasValidCredentials завершается с ошибкой.

Я храню мой пользователь следующим образом в моей базе данных: user table setup

Так что я знаю, что хэшируется пароль достаточно долго, и хранятся в базе данных. Я вижу, что $ hashedValue возвращается в двойных кавычках, может ли это быть проблемой?

Независимо от того, что я не могу войти в систему, поскольку функция попытки класса Session Guard всегда терпит неудачу, так как hasValidCredentials всегда возвращает false, и я довольно сильно тупик, поскольку учетные данные являются точными.

Хотите знать, есть ли у кого-нибудь идеи относительно того, как это решить?

Благодаря

+1

кажется, что следующий оценивается как истина: 'password_verify ('секретного пароля', '$ 2y $ 10 $ EnIi90KP.0BqCVJgK21BrO3xzArxCZaiAPaUebCw.K2Xw71QOCZv2');' – liamjnorman

+0

Обрати внимание, что мой ключ приложения в base64 кодированного.Может ли это также вызвать проблемы при генерации хэша? – liamjnorman

ответ

1

password_verify является уроженцем функция PHP, в основном аналог password_hash. поскольку

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

возвращает false, ваш $hashedValue является не шифрованное значение tester.

Я предполагаю, что вы как-то дважды зашифровали свой пароль, например. ваш компонент laravel и ваш компонент доктрины также передают значение пароля.

Обратите внимание, что laravel's app.key не используется для шифрования паролей, как вы можете видеть в BcryptHasher, поэтому он не может повлиять на результат.

+1

Спасибо passioncoder. Я запускал bcrypt на нем после того, как Laravel уже запустил Hash :: make на вкладке. – liamjnorman

Смежные вопросы