Laravel 5.3 密码代理定制

Laravel 5.3 Password Broker Customization

有谁知道如何覆盖 laravel 的密码代理中使用的功能?我知道文档:

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

提供有关如何处理视图和一些表面级别的内容的信息,但实际上根本不清楚,或者我可能没有阅读足够的次数。

我已经知道如何覆盖 ResetsPasswords.php 特性,但是覆盖 Password::broker() 的功能是针对下一层的。

如果需要更多信息,我可以提供一些。

提前致谢。

我不得不面对同样的问题,需要覆盖一些 PasswordBroker 函数。在网络上进行了大量调查并多次尝试失败后,我最终得出以下实现:

  1. 在 App\Providers 中创建了一个 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. config/app.php中注释掉一行:
    //Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
    并添加:
    App\Providers\CustomPasswordResetServiceProvider::class,

  3. 在 App\Services 文件夹中创建了一个 CustomPasswordBrokerManager 并复制了默认 PasswordBrokerManager 的上下文,位于:
    Illuminate\Auth\Passwords\PasswordBrokerManager.php
    然后将函数 resolve 修改为 return 我的 CustomPasswordProvider class.

    的一个实例
    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 class 它扩展了默认值 PasswordBroker 位于:
    Illuminate\Auth\Passwords\PasswordBroker 并覆盖了我需要的功能。

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

不确定这是否是最佳实施方式,但它对我有用。

答案中第 1 步和第 3 步缺少一些内容

步骤 1

可能最安全的方法是简单地将 class 从 Illuminate\Auth\Passwords\PassswordResetServiceProvider.php 复制到 App\Provider\CustomPasswordResetServiceProvider 并更改:

  1. 命名空间为 namespace App\Providers;
  2. Class 命名为 CustomPasswordResetServiceProvider
  3. use App\Services\CustomPasswordBrokerManager;添加到顶部
  4. 在函数 registerPasswordBroker 内将 PasswordBrokerManager 重命名为 CustomPasswordBrokerManager

步骤 2.

除了更改解析方法外,还要执行以下操作:

  1. 将命名空间更改为 namespace App\Services;
  2. use Illuminate\Auth\Passwords\DatabaseTokenRepository;添加到顶部
  3. 将 class 名称更改为 CustomPasswordBrokerManager