Ручное хеширование незашифрованных паролей в базе данных всегда возвращает false с помощью Hash :: check - PullRequest
0 голосов
/ 10 июня 2019

Я перемещаю сайт в инфраструктуру 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>

Я ожидаю, что смогу войти в существующую учетную запись, но при попытке (используя резервную копию исходной базы данных для проверки паролей) я получаю типичное «Эти учетные данные не соответствуют нашим записям». ошибка, которую пользователь получит при вводе неверного пароля.

1 Ответ

1 голос
/ 10 июня 2019

Я разобрался в своей проблеме. В какой-то момент длина моего поля пароля изменилась на 20, а не на 250. Очевидно, что это урезало хэш. Упс! Я подумал, что это было что-то глупое, что я пропустил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...