Laravel 5.3密码代理定制

And*_* F. 12 php laravel laravel-5 laravel-authorization laravel-mail

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

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

提供有关如何为视图和一些表面层次的事情做些什么的信息,但它根本不是很清楚,或者我可能没有阅读足够的时间.

我已经知道如何覆盖ResetsPasswords.phpTrait但是覆盖了Password::broker()for的下一层的功能.

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

先感谢您.

KoK*_*oKa 28

我不得不面对同样的问题,需要覆盖一些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'];
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. config/app.php中注释掉了行:
    //Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
    并添加了:
    App\Providers\CustomPasswordResetServiceProvider::class,

  3. 在App\Services文件夹中创建了一个CustomPasswordBrokerManager并复制了位于以下位置的默认PasswordBrokerManager的上下文:
    Illuminate\Auth\Passwords\PasswordBrokerManager.php
    然后修改了函数resolve以返回我的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'])
    );
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 最后在App\Services文件夹中,我创建了一个CustomPasswordBroker类,它扩展了位于以下位置的默认PasswordBroker:
    Illuminate\Auth\Passwords\PasswordBroker并覆盖了我需要的功能.

    use Illuminate\Auth\Passwords\PasswordBroker as BasePasswordBroker;    
    
    class CustomPasswordBroker extends BasePasswordBroker    
    {    
    // override the functions that you need here    
    }      
    
    Run Code Online (Sandbox Code Playgroud)

不确定这是否是最好的实现,但它对我有用.

  • 这次真是万分感谢.我被这个密码代理和密码代理管理器弄得一团糟.说真的,我无法理解它们是如何复杂化过去那么简单的东西.此外,对于在Laravel 5.4上执行此操作的人来说,服务提供商的`register`方法与此处显示的方法略有不同.基本上,`registerPasswordBroker`方法应该像`Illuminate\Auth\Passwords\PasswordResetServiceProvider`一样被复制,除了你使用自己的自定义`CustomPasswordBrokerManager`实例的部分. (3认同)
  • 只需更改密码重置所需的密码长度即可。在laravel代码中,最短6个字符的长度很深,因此我只能在这里根据您的回答进行更改。非常感谢! (2认同)

Ada*_*dam 5

答案/sf/answers/2999916391/中的步骤1和3缺少一些内容

步骤1

可能最安全的方法是将类从复制Illuminate\Auth\Passwords\PassswordResetServiceProvider.phpApp\Provider\CustomPasswordResetServiceProvider并更改:

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

第2步。

除了更改解决方法之外,还请执行以下操作:

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