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:
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']; }}
In config/app.php commented out line:
//Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
and added:App\Providers\CustomPasswordResetServiceProvider::class,
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']));}
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\CustomPasswordResetServiceProvider
and change:
- Namespace to
namespace App\Providers;
- Class name to
CustomPasswordResetServiceProvider
- Add
use App\Services\CustomPasswordBrokerManager;
to the top - Inside the function
registerPasswordBroker
renamePasswordBrokerManager
toCustomPasswordBrokerManager
Step 2.
Besides changing the resolve method also do the following:
- Change namespace to
namespace App\Services;
- Add
use Illuminate\Auth\Passwords\DatabaseTokenRepository;
to the top - Change class name to
CustomPasswordBrokerManager