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

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

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

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

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

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

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

10

Решение

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

  1. Создано CustomPasswordResetServiceProvider внутри приложения \ провайдеров, где я зарегистрировал 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. В конфиг / app.php закомментированная строка:
    //Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
    и добавил:
    App\Providers\CustomPasswordResetServiceProvider::class,

  3. Внутри папки App \ 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'])
    );
    }
    
  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
    }
    

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

21

Другие решения

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

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

По вопросам рекламы [email protected]