この記事では、Laravel11のマルチログインで追加した方のアカウントが未認証だった時のリダイレクト先を変更する方法を解説しています。
Laravel11で初めてマルチログイン実装したときに、ちょっとだけ従来の書き方じゃないところが出てきたので、メモがわりに書いてます。
目次
前提
- Laravel11の環境構築の完了
- Breezeのインストールが完了している
- マルチログインの設定まわりが完了している (ガードとプロバイダの設定など)
結論 Laravel11 + Breezeのマルチログインで未認証ユーザーのリダイレクト先を変える方法
Laravel11では、bootstrap/app.php
のなかにミドルウェアの設定を記述していくように変更になっています。
以前はapp/Http/Kernel.php
に設定するようになっていました。
なので、bootstrap/app.php
を開きましょう。
<?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__ . '/../routes/web.php',
commands: __DIR__ . '/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->web(append: [
\App\Http\Middleware\HandleInertiaRequests::class,
\Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class,
]);
$middleware->redirectGuestsTo(function ($request) {
return $request->is('admin*') ? route('admin.login') : route('login');
});
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
admin*
の部分はそれぞれguardsで設定したものに適宜変更してください。
追加したコード
$middleware->redirectGuestsTo(function ($request) {
return $request->is('admin*') ? route('admin.login') : route('login');
});
これにより、未認証ユーザーが admin/*
のパスにアクセスした場合は admin.login
に、それ以外の場合は通常の login
にリダイレクトされます。
route('admin.login')
および route('login')
が正しく機能するには、対応するルートが適切に設定されている必要があります。ルート名を使用するためには、ルート定義に ->name('admin.login')
および ->name('login')
といった名前を付ける必要があります。
一応公式ドキュメントの内容も掲載
Redirecting Unauthenticated Users
When the
auth
middleware detects an unauthenticated user, it will redirect the user to thelogin
named route. You may modify this behavior using the methodredirectGuestsTo
of your application'sbootstrap/app.php
file:https://laravel.com/docs/11.x/authentication#redirecting-unauthenticated-usersuse Illuminate\Http\Request; ->withMiddleware(function (Middleware $middleware) { $middleware->redirectGuestsTo('/login'); // Using a closure... $middleware->redirectGuestsTo(fn (Request $request) => route('login')); })
ChatGPTに翻訳させた結果↓
authミドルウェアが未認証ユーザーを検出すると、そのユーザーはloginという名前のルートにリダイレクトされます。この動作は、アプリケーションのbootstrap/app.phpのredirectGuestsToメソッドを使用して変更することができます。
翻訳の通り、redirectGuestsTo
を使用して変更しましょうって話です。
参考
Authentication - Laravel 11.x - The PHP Framework For Web Artisans