Laravel 5.3 Password Broker Customization Laravel 5.3 Password Broker Customization laravel laravel

Laravel 5.3 Password Broker Customization


I had to face the same issue, needed to override some of the PasswordBroker functions. After a lot of investigation on the web and many failed attempts to do so, I ended up to the following implementation:

  1. Created a CustomPasswordResetServiceProvider inside App\Providers where I registered a CustomPasswordBrokerManager instance.

    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. In config/app.php commented out line:
    //Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
    and added:
    App\Providers\CustomPasswordResetServiceProvider::class,

  3. Inside App\Services folder created a CustomPasswordBrokerManager and copied the context of the default PasswordBrokerManager located at:
    Illuminate\Auth\Passwords\PasswordBrokerManager.php
    Then modified the function resolve to return an instance of my 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. Finally inside App\Services folder I created a CustomPasswordBroker class which extends default PasswordBroker located at:
    Illuminate\Auth\Passwords\PasswordBroker and overridden the functions that I needed.

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

Not sure if this is the best implementation but it worked for me.


There are some missing things for step 1 & 3 in the answer https://stackoverflow.com/a/42855948/2311074

Step 1

Probably the safest way is to simply copy the class from Illuminate\Auth\Passwords\PassswordResetServiceProvider.php to App\Provider\CustomPasswordResetServiceProviderand change:

  1. Namespace to namespace App\Providers;
  2. Class name to CustomPasswordResetServiceProvider
  3. Add use App\Services\CustomPasswordBrokerManager; to the top
  4. Inside the function registerPasswordBroker rename PasswordBrokerManager to CustomPasswordBrokerManager

Step 2.

Besides changing the resolve method also do the following:

  1. Change namespace to namespace App\Services;
  2. Add use Illuminate\Auth\Passwords\DatabaseTokenRepository; to the top
  3. Change class name to CustomPasswordBrokerManager