Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день.
Подымал старый сайт с 5.1 -> 5.2 -> 5.3
На 5.2 работает всё нормально.
Регистрирую нового пользователя. Выхожу logout/
При повторной аутентификации выдаёт "Пользователь с такими данными не найден".
В базе user есть. Из базы достаётся нужный user для сравнения. Но password_verify($password, $hash) возвращает false.
Может кто подскажет хоть в каком направлении копать.
Не в сети
Сам докопал. Но может кому пригодится.
При создании user пароль RegistersUsers::create пароль шифруется bcrypt()
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
а при аутентификации прилетает для сравнения без шифрования bcrypt().
Не в сети
Такая же история и с восстановление пароля
переопределяем метод убираем bcrypt()
protected function resetPassword($user, $password)
{
$user->forceFill([
'password' => bcrypt($password),
'remember_token' => Str::random(60),
])->save();
$this->guard()->login($user);
}
Думал решить в обратном направлении добавить bcrypt() при проверке пароля. Не помогло. Пришлось убирать.
Не в сети
не надо убирать bcrypt!!! обалдел что ли plain text-ом пароли в базе хранить? тут люди выдумывают всякие хитрые методы криптографии чтобы получше значит зашифровать для пущей безопасности, а ты вообще решил всё нафиг убрать? это ж вообще песец какой-то! я аж круасаном поперхнулся как прочитал!
Не в сети
Вот тут vendor\laravel\framework\src\Illuminate\Hashing\BcryptHasher.php при сохранении в базу он ещё раз шифруется этой же функцией.
public function make($value, array $options = [])
{
$cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;
$hash = password_hash($value, PASSWORD_BCRYPT, ['cost' => $cost]);
if ($hash === false) {
throw new RuntimeException('Bcrypt hashing not supported.');
}
return $hash;
}
И после того как убрал, я проверил, что в базу ложится шифрованный и чистый пароль. Может я чего не догоняю. Поясните , пожалуйста.
Не в сети
а в эту функцию он как попадает? то есть хэшер где-то потом вызывается кодом который с credentials работает? ну тогда ладно. я просто не помню детали работы стандартной авторизации, может правда поменяли где-то в какой-то из версий. тогда извини, если в базе пароль шифрованный лежит, тогда я был неправ
Не в сети
а в эту функцию он как попадает? то есть хэшер где-то потом вызывается кодом который с credentials работает? ну тогда ладно. я просто не помню детали работы стандартной авторизации, может правда поменяли где-то в какой-то из версий. тогда извини, если в базе пароль шифрованный лежит, тогда я был неправ
Я сам уже два дня разбираюсь с этим xdebug меня привёл в эту функцию когда я искал когда же входящий пароль шифруют. Вопрос зачем при регистрации его шифруют дважды, а при сравнении вообще не шифруют. Не могу понять как должно быть в оригинале. Зачем ещё одно шифрование на входе. И почему результат сравнения false если так задумано. Вот и спрашиваю зачем сравнивают дважды шифрованный с не шифрованным. В мануале password_verify() написано на входе входное значение и просто хеш.
Не в сети
я бы просто сделал – открыл бы стандартную коробочную авторизацию конкретной версии фреймворка и сравнил бы со своим кодом. если используется стандартная авторизация (или допиленная на её основе) – изменения сразу будут заметны. все нужные трейты лежат в /vendor/laravel/framework/src/Illuminate/Foundation/Auth, шаблоны на основе которых генерится авторизация через php artisan make:auth – в /vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make, шаблон проекта, который использует laravel new <xxx> – в репозитории laravel/laravel на гитхабе
Не в сети
я бы просто сделал – открыл бы стандартную коробочную авторизацию конкретной версии фреймворка и сравнил бы со своим кодом. если используется стандартная авторизация (или допиленная на её основе) – изменения сразу будут заметны. все нужные трейты лежат в /vendor/laravel/framework/src/Illuminate/Foundation/Auth, шаблоны на основе которых генерится авторизация через php artisan make:auth – в /vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make, шаблон проекта, который использует laravel new <xxx> – в репозитории laravel/laravel на гитхабе
Так я и делал. Именно на гитхабе в контролерах написано первичное шифрование. А папки vendor там нет что бы сравнить что подгрузил мне composer.
Не в сети
папки vendor там и не будет, в неё пакеты композером с гитхаба ставятся, для кода фреймворка это очевидно (см. путь) laravel/framework
Не в сети
Страницы 1