PHP
Laravel

Laravelで複数のPasswordBrokerを扱う


前提

雇用主(employer)や労働者(worker)といった複数の種類のユーザーを扱うときに、

それぞれのユーザーのパスワードリセットの仕組みを別々で実装したい。


やること

基本的には下記の記事を参考に PasswordServiceProviderPasswordBrokerManagerPasswordBroker をそれぞれのユーザーごとに作成する。

https://qiita.com/pinekta/items/860231bfb30c1227aa9f


複数のPasswordServiceProviderを扱う

上記の記事だと1つのPasswordServiceProviderしか扱えない。

複数扱いたい場合は、それぞれのPasswordServiceProviderで provides メソッドをオーバーライドする必要がある。

class EmployerPasswordServiceProvider extends PasswordResetServiceProvider {

protected function registerPasswordBroker() {
$this->app->singleton('auth.password.employer', function ($app) {
return new EmployerPasswordBrokerManager($app);
});

$this->app->singleton('auth.password.broker.employer', function ($app) {
return $app->make('auth.password.employer')->broker('employers');
});
}

// シングルトンとして登録した上記の2つをここで返す
public function provides() {
return ['auth.password.broker.employer', 'auth.password.employer'];
}
}