Настройка брокера паролей Laravel 5.3
Кто-нибудь знает, как переопределить функции, используемые в брокере паролей Laravel? Я знаю документы:
https://laravel.com/docs/5.3/passwords
Дайте информацию о том, что делать с такими вещами, как представления и некоторые вещи на поверхностном уровне, но на самом деле не совсем понятно, или, может быть, я не читаю это достаточно много раз.
Я уже знаю, как переопределить ResetsPasswords.php
Черта, но преобладающая функциональность Password::broker()
для следующего слоя в.
Если потребуется дополнительная информация, я могу предоставить ее.
Заранее спасибо.
2 ответа
Мне пришлось столкнуться с той же проблемой, необходимо переопределить некоторые функции 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,
Внутри папки 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']) ); }
Наконец, внутри папки 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
и изменить
- Пространство имен для
namespace App\Providers;
- Имя класса для
CustomPasswordResetServiceProvider
- добавлять
use App\Services\CustomPasswordBrokerManager;
к началу - внутри функции
registerPasswordBroker
переименоватьPasswordBrokerManager
вCustomPasswordBrokerManager
Шаг 2.
Помимо изменения метода разрешения также сделайте следующее:
- Изменить пространство имен на
namespace App\Services;
- добавлять
use Illuminate\Auth\Passwords\DatabaseTokenRepository;
к началу - Изменить имя класса на
CustomPasswordBrokerManager