Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 21.03.2017 11:37:35

Authentication 5.3

Добрый день.
Подымал старый сайт с 5.1 -> 5.2 -> 5.3
На 5.2 работает всё нормально.
Регистрирую нового пользователя. Выхожу logout/
При повторной аутентификации выдаёт "Пользователь с такими данными не найден".
В базе user есть. Из базы достаётся нужный user для сравнения. Но password_verify($password, $hash) возвращает false.
Может кто подскажет хоть в каком направлении копать.

Не в сети

#2 21.03.2017 12:13:50

Re: Authentication 5.3

Сам докопал. Но может кому пригодится.
При создании user пароль RegistersUsers::create пароль шифруется  bcrypt()

protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }

а при аутентификации прилетает для сравнения без шифрования bcrypt().

Не в сети

#3 21.03.2017 13:43:14

Re: Authentication 5.3

Такая же история и с восстановление пароля
переопределяем метод убираем bcrypt()

    protected function resetPassword($user, $password)
    {
        $user->forceFill([
            'password' => bcrypt($password),
            'remember_token' => Str::random(60),
        ])->save();

        $this->guard()->login($user);
    }

Думал решить в обратном направлении добавить bcrypt() при проверке пароля. Не помогло. Пришлось убирать.

Не в сети

#4 21.03.2017 14:29:16

Re: Authentication 5.3

не надо убирать bcrypt!!! обалдел что ли plain text-ом пароли в базе хранить? тут люди выдумывают всякие хитрые методы криптографии чтобы получше значит зашифровать для пущей безопасности, а ты вообще решил всё нафиг убрать? это ж вообще песец какой-то! я аж круасаном поперхнулся как прочитал!

Не в сети

#5 21.03.2017 14:37:16

Re: Authentication 5.3

Вот тут 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;
    }

И после того как убрал, я проверил, что в базу ложится шифрованный и чистый пароль. Может я чего не догоняю. Поясните , пожалуйста.

Не в сети

#6 21.03.2017 15:03:54

Re: Authentication 5.3

а в эту функцию он как попадает? то есть хэшер где-то потом вызывается кодом который с credentials работает? ну тогда ладно. я просто не помню детали работы стандартной авторизации, может правда поменяли где-то в какой-то из версий. тогда извини, если в базе пароль шифрованный лежит, тогда я был неправ

Не в сети

#7 21.03.2017 15:16:12

Re: Authentication 5.3

constb пишет:

а в эту функцию он как попадает? то есть хэшер где-то потом вызывается кодом который с credentials работает? ну тогда ладно. я просто не помню детали работы стандартной авторизации, может правда поменяли где-то в какой-то из версий. тогда извини, если в базе пароль шифрованный лежит, тогда я был неправ

Я сам уже два дня разбираюсь с этим xdebug меня привёл в эту функцию когда я искал когда же входящий пароль шифруют. Вопрос зачем при регистрации его шифруют дважды, а при сравнении вообще не шифруют. Не могу понять как должно быть в оригинале. Зачем ещё одно шифрование на входе. И почему результат сравнения false если так задумано. Вот и спрашиваю зачем сравнивают дважды шифрованный с не шифрованным. В мануале password_verify() написано на входе входное значение и просто хеш.

Не в сети

#8 21.03.2017 15:53:03

Re: Authentication 5.3

я бы просто сделал – открыл бы стандартную коробочную авторизацию конкретной версии фреймворка и сравнил бы со своим кодом. если используется стандартная авторизация (или допиленная на её основе) – изменения сразу будут заметны. все нужные трейты лежат в /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 на гитхабе

Не в сети

#9 21.03.2017 16:54:44

Re: Authentication 5.3

constb пишет:

я бы просто сделал – открыл бы стандартную коробочную авторизацию конкретной версии фреймворка и сравнил бы со своим кодом. если используется стандартная авторизация (или допиленная на её основе) – изменения сразу будут заметны. все нужные трейты лежат в /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.

Не в сети

#10 21.03.2017 17:28:38

Re: Authentication 5.3

папки vendor там и не будет, в неё пакеты композером с гитхаба ставятся, для кода фреймворка это очевидно (см. путь) laravel/framework

Не в сети

Подвал раздела