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

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

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

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

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

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

Спасибо заранее.

Ответ 1

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

  • Создал 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'];
        }
    }
    
  • В config/app.php прокомментированная строка:
    //Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
    и добавил:
    App\Providers\CustomPasswordResetServiceProvider::class,

  • Внутри приложения \Services папка создала CustomPasswordBrokerManager и скопировала контекст по умолчанию PasswordBrokerManager, расположенный по адресу:
    Осветить\Auth\Пароли\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'])
    );
    }
    
  • Наконец, в папке App\Services я создал класс CustomPasswordBroker, который расширяет стандартный PasswordBroker, расположенный по адресу:
    Освежите \Auth\Passwords\PasswordBroker и переопределите нужные мне функции.

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

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

Ответ 2

В ответе на шаги 1 и 3 отсутствуют некоторые ответы в ответе fooobar.com/info/721746/...

Шаг 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