Laravel では Auth や Jetstream で認証機能を実装できますが、マルチログインは結構面倒です。
例えば未認証のリダイレクト処理はミドルウェアの Authenticate->redirectTo() で処理していますが、シングルログイン(user)の記述です。
app/Http/Middleware/Authenticate.php
protected function redirectTo($request)
{
if (!$request->expectsJson()) {
return route('login');
}
}
ここで user、admin 2つのマルチドメイン認証で「/user/xxx」「/admin/xxx」にアクセスしたとき、上記のルーティングでは「/login」にリダイレクトされてしまいます。
また「/login」でなく「/user/login」「/admin/login」でルーティングすると当然ながら Routing エラーになります。
Symfony\Component\Routing\Exception\RouteNotFoundException
Route [login] not defined.
2つの認証「user」「admin」が未承認時、「/user/login」「/admin/login」 にリダイレクトするよう修正します。今回は直接「user」「admin」と直接設定しましたが、ループ処理は guard の設定と連携してもよいかと思います。
protected function redirectTo($request)
{
if (!$request->expectsJson()) {
foreach (['user', 'admin'] as $user) {
if ($request->routeIs("{$user}.*)) {
return route("{$user}.login");
}
}
}
}
また、認証処理を user、admin の各コントローラーのコンストラクタやサービスなどで認証する場合は、 Authenticate->redirectTo() は無効にする必要があります。