Laravel PHP

Laravel11 + Breezeのマルチログインで未認証ユーザーのリダイレクト先を変える方法

本サイトの記事内にアフィリエイト広告が含まれる場合があります。

Laravel11 + Breezeのマルチログインで未認証ユーザーのリダイレクト先を変える方法のサムネイル画像

awayuki

音大出身。学生時代はフリーランスでWEB制作・開発しながら、2社で長期エンジニアインターンを経験しました(2年半)。 23卒で、自社開発ベンチャー企業に入社しエンジニア・デザイナーとして働き、2024年1月起業しました! このブログでは、ブログ開設方法・プログラミング・音大からエンジニアになれた方法など書いています。 お仕事依頼はお問い合わせフォームからお問い合わせお願いします。 Zenn

この記事では、Laravel11のマルチログインで追加した方のアカウントが未認証だった時のリダイレクト先を変更する方法を解説しています。

Laravel11で初めてマルチログイン実装したときに、ちょっとだけ従来の書き方じゃないところが出てきたので、メモがわりに書いてます。

著:加藤じゅんこ
¥3,000 (2024/10/02 15:14時点 | Amazon調べ)

前提

  • 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 the login named route. You may modify this behavior using the method redirectGuestsTo of your application's bootstrap/app.php file:

use Illuminate\Http\Request;
 
->withMiddleware(function (Middleware $middleware) {
    $middleware->redirectGuestsTo('/login');
 
    // Using a closure...
    $middleware->redirectGuestsTo(fn (Request $request) => route('login'));
})
https://laravel.com/docs/11.x/authentication#redirecting-unauthenticated-users

ChatGPTに翻訳させた結果↓

authミドルウェアが未認証ユーザーを検出すると、そのユーザーはloginという名前のルートにリダイレクトされます。この動作は、アプリケーションのbootstrap/app.phpのredirectGuestsToメソッドを使用して変更することができます。

翻訳の通り、redirectGuestsTo を使用して変更しましょうって話です。

参考

Authentication - Laravel 11.x - The PHP Framework For Web Artisans

著:加藤じゅんこ
¥3,000 (2024/10/02 15:14時点 | Amazon調べ)
  • この記事を書いた人

awayuki

音大出身。学生時代はフリーランスでWEB制作・開発しながら、2社で長期エンジニアインターンを経験しました(2年半)。 23卒で、自社開発ベンチャー企業に入社しエンジニア・デザイナーとして働き、2024年1月起業しました! このブログでは、ブログ開設方法・プログラミング・音大からエンジニアになれた方法など書いています。 お仕事依頼はお問い合わせフォームからお問い合わせお願いします。 Zenn

-Laravel, PHP