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

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

https://laravel.com/docs/5.3/passwords

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

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

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

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

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, расположенный по адресу:
    Осветить \Auth\ Пароли \PasswordBrokerManager.php
    Затем изменил функцию resol для возврата экземпляра моего класса 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, расположенный по адресу:
    Подсветите \Auth\Passwords\PasswordBroker и переопределите нужные мне функции.

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

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

В ответе на шаги 1 и 3 отсутствуют некоторые ответы в ответе /questions/8228542/nastrojka-brokera-parolej-laravel-53/8228559#8228559

Шаг 1

Вероятно, самый безопасный способ - просто скопировать класс из Illuminate\Auth\Passwords\PassswordResetServiceProfider.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
Другие вопросы по тегам