Настройка брокера паролей Laravel 5.3

Кто-нибудь знает, как переопределить функции, используемые в брокере паролей laravel? Я знаю документы:

https://laravel.com/docs/5.3/passwords#resetting-views

Дайте информацию о том, что делать с такими вещами, как представления и несколько поверхностных вещей, но на самом деле это совсем не ясно, или, может быть, я не читаю это достаточное количество раз.

Я уже знаю, как переопределить черту ResetsPasswords.php, но переопределение функциональности черты Password::broker() относится к следующему уровню.

Если есть необходимость в дополнительной информации, я могу предоставить некоторые.

Заранее спасибо.


person Andre F.    schedule 10.11.2016    source источник


Ответы (2)


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

  1. Создал CustomPasswordResetServiceProvider внутри App\Providers, где я зарегистрировал экземпляр CustomPasswordBrokerManager.

    namespace App\Providers;
    use Illuminate\Support\ServiceProvider;
    use App\Services\CustomPasswordBrokerManager; 
    class CustomPasswordResetServiceProvider extends ServiceProvider{
        protected $defer = true;
    
        public function register()
        {
            $this->registerPasswordBrokerManager();
        }
    
        protected function registerPasswordBrokerManager()
        {
            $this->app->singleton('auth.password', function ($app) {
                return new CustomPasswordBrokerManager($app);
            });
        }
    
        public function provides()
        {
            return ['auth.password'];
        }
    }
    
  2. В config/app.php закомментирована строка:
    //Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
    и добавлена:
    App\Providers\CustomPasswordResetServiceProvider::class,

  3. Внутри папки App\Services создан CustomPasswordBrokerManager и скопирован контекст PasswordBrokerManager по умолчанию, расположенный по адресу:
    Illuminate\Auth\Passwords\PasswordBrokerManager.php
    Затем изменен функция разрешить вернуть экземпляр моего класса CustomPasswordProvider.

    protected function resolve($name)
    {
        $config = $this->getConfig($name);
        if (is_null($config)) {
            throw new InvalidArgumentException("Password resetter [{$name}] is not defined.");
        }
    
        return new CustomPasswordBroker(
            $this->createTokenRepository($config),
            $this->app['auth']->createUserProvider($config['provider'])
    );
    }
    
  4. Наконец, внутри папки App\Services я создал класс CustomPasswordBroker, который расширяет PasswordBroker по умолчанию, расположенный по адресу:
    Illuminate\Auth\Passwords\PasswordBroker, и переопределил нужные мне функции.

    use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker;    
    
    class CustomPasswordBroker extends BasePasswordBroker    
    {    
    // override the functions that you need here    
    }      
    

Не уверен, что это лучшая реализация, но она сработала для меня.

person KoKa    schedule 17.03.2017
comment
Это очень похожая реализация, которую я закончил. Очень хорошо объяснил с идентификацией в каталогах и все такое. +1 и отмечено Правильно! - person Andre F.; 18.03.2017
comment
Просто пришлось изменить необходимую длину пароля для сброса пароля. Минимальная длина 6 символов довольно глубоко скрыта в коде laravel, поэтому я мог изменить ее только с помощью вашего ответа здесь. Большое спасибо! - person johnnydoe82; 18.04.2017
comment
Спасибо тебе за это. Я застрял в этой каше с Password Broker и Password Broker Manager. Серьезно, я не могу понять, как они так усложнили то, что раньше было простым. Кроме того, для людей, делающих это на Laravel 5.4, есть небольшая разница для метода register поставщика услуг, чем то, что показано здесь. По сути, метод registerPasswordBroker должен быть скопирован как есть в Illuminate\Auth\Passwords\PasswordResetServiceProvider, за исключением той части, где вы используете свой собственный экземпляр CustomPasswordBrokerManager. - person racl101; 20.06.2017
comment
Большое спасибо, мне очень помогло! - person alebupal; 05.06.2019

В ответе https://stackoverflow.com/a/42855948/2311074 отсутствуют некоторые вещи для шагов 1 и 3.

Шаг 1

Вероятно, самый безопасный способ — просто скопировать класс из Illuminate\Auth\Passwords\PassswordResetServiceProvider.php в App\Provider\CustomPasswordResetServiceProvider и изменить:

  1. Пространство имен для namespace App\Providers;
  2. Имя класса для CustomPasswordResetServiceProvider
  3. Добавьте use App\Services\CustomPasswordBrokerManager; вверху
  4. Внутри функции registerPasswordBroker переименуйте PasswordBrokerManager в CustomPasswordBrokerManager

Шаг 2.

Помимо изменения метода разрешения также выполните следующие действия:

  1. Измените пространство имен на namespace App\Services;
  2. Добавьте use Illuminate\Auth\Passwords\DatabaseTokenRepository; вверху
  3. Измените название класса на CustomPasswordBrokerManager
person Adam    schedule 20.06.2018