Laravel8 Fortify/Jetstream で、マルチログイン(ユーザーサイトと管理サイト別々に認証)を実現する方法について調べている。
結論から言うと、Laravel Fortify/Jetstreamは非対応。 なので、マルチログイン実現するためには、実装のカスタマイズが必要な事が分かった。
実装の方針としてはざっくり次の通り。
- マルチログイン用のガードの設定を追加する
- Fortify/Jestreamの認証基盤をまるごと複製
- 細かい実装を調整する
マルチログイン用のガードの設定を追加する
例えば、user、ownerの2系統でログインできるようにしたい場合は、guard(config/auth.php?)に設定を追加する。 ここはLaravelの標準的な設定の範囲。
Fortify/Jestreamの認証基盤をまるごと複製
既存の実装がマルチログインに適した実装になっていないので、 必要な箇所だけ抽出して差し替える、という方法よりも丸ごと複製して、マルチログイン用にカスタマイズするのが良いと思う。
「ログインなんて1箇所だけでしょ、userもadminも一緒のログインページからログインして、ロールとか権限で分けるでしょ? マルチログインなんて知らんよ」
みたいな実装になっているので、部分的に抜き出して修正する形だと不便になるケースが多いと思う。
細かい実装を調整する
全段で書いたように、マルチログインに適した実装になっていない。 例えば、URLや認証で使用するセッション名など細かな部分が固定値になっており、userとadminを別々に管理したい、と思ってもそのままで使えないのだ。
まとめ
Fortify/Jetstreamとか使わず、MPAとして実装するのであれば、 もっとシンプルになる気もするけど、今後はどうなんだろう。
やってみると、フレームワーク側でなんでもできるのは一見すると便利そうだけど、フレームワークのレールに沿わない事をやりたい場合に、急激に難易度が上がる気がすると感じる。