У меня есть проект Laravel 5.4, в котором я пытаюсь запустить простой интеграционный тест, который проверяет, может ли пользователь правильно войти в систему, для этого я создаю нового пользователя через Factory.
$user = factory(User::class)->create(['password' =>'secret']);
Тогда в моем тесте
$this->visitRoute('admin.login')
->submitForm('LOGIN', ['email' => $user->email, 'password' => 'secret'])
->seeIsAuthenticated()
->seeStatusCode(200);
Пользователь никогда не аутентифицируется, я могу подтвердить, что адрес электронной почты $user-> совпадает с адресом в БД, но пароль никогда не соответствует...
Поэтому я проверил хэш, сгенерированный в БД, с «секретной» строкой на этом веб-сайте https://www.dailycred.com/article/bcrypt-calculator
Я получаю сообщение об ошибке invalid salt revision
я озадачен, что это такое? Я хеширую пароль с помощью мутатора, который выглядит так
public function setPasswordAttribute($value) {
$this->attributes['password'] = bcrypt($value);
}
В соответствии с советом, уже данным в одном из комментариев ниже, я попробовал следующее решение.
$hasher = new BcryptHasher();
$hash = $hasher->make($value);
$this->attributes['password'] = $hash;
Через xDebug я могу сказать, что он дважды вводит метод make(), один раз при инициализации до вызова мутатора, и в этот момент он отправляет случайный набор символов, затем он запускает мутатор и команду make() со строкой secret
Как и ожидалось, я извлекаю сгенерированный хэш и обнаруживаю ту же проблему... invalid salt revision
password_hash
для хеширования пароля? В чем подвох этого вашего метода, чем он хорош? - person Mjh   schedule 04.04.2017