Я перемещаю сайт в инфраструктуру laravel, и база данных для старого сайта хранит пароли пользователей в виде открытого текста. Очевидно, это проблема, поэтому я использовал этот код для хэширования паролей. Клиент также запросил, чтобы пользователи могли войти через свое имя пользователя, поэтому я отредактировал контроллер входа по умолчанию, чтобы учесть это. Создание новой учетной записи и вход в нее работает просто отлично, но попытка войти в существующую учетную запись всегда возвращает неверные учетные данные.
Я начал с php artisan make:auth
и отредактировал оттуда сгенерированные файлы.
Я пробовал хешировать пароли как в миграции, так и в php artisan tinker. Я также пытался использовать $user->password = Hash::make($user->password);
вместо $user->password = bcrypt($user->password);
, также в миграции и повозиться. Я получаю один и тот же результат каждый раз при попытке войти в систему.
Если я использую Hash :: make в кустарном ремесле, а затем Hash :: проверю созданный хэш и пароль в виде открытого текста, он возвращает значение true, но когда я пытаюсь войти в систему с этими учетными данными, происходит сбой. bcrypt возвращает false для Hash :: check в тинкере. Использование bcrypt возвращает true для Hash :: needsRehash, а Hash :: make возвращает false.
Имена пользователей заданы как уникальные.
Модель пользователя:
protected $primaryKey = 'user_id';
protected $fillable = [
'username', 'password',
];
protected $guarded = [];
protected $hidden = [
'password', 'remember_token',
];
public function getAuthPassword()
{
return $this->password;
}
LoginController:
use AuthenticatesUsers;
protected $redirectTo = '/home';
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function username()
{
return 'username';
}
поля формы имени пользователя / пароля для входа в систему login.blade:
<div class="form-group row">
<label for="username" class="col-md-4 col-form-label text-md-right">{{ __('Username') }}</label>
<div class="col-md-6">
<input id="username" type="text" class="form-control @error('username') is-invalid @enderror" name="username" value="{{ old('username') }}" required autofocus>
@error('username')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
Я ожидаю, что смогу войти в существующую учетную запись, но при попытке (используя резервную копию исходной базы данных для проверки паролей) я получаю типичное «Эти учетные данные не соответствуют нашим записям». ошибка, которую пользователь получит при вводе неверного пароля.