shun123
@shun123 (shun noel)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Laravel11 + React + Inertiaのマルチログイン認証で、リダイレクトが適切にできない。

解決したいこと

https://reffect.co.jp/laravel/laravel9-laravel-breeze
上記サイトを参考にLaravel11+reactでマルチログイン認証機能を開発しています。

既存のUserモデル(一般ユーザアカウント)をコピーして作成した、Adminモデル(管理者権限アカウント)でGuard認証を行うようにしています。

現在は管理者権限アカウントでログインできるところまで実装ができました。
Userモデル(一般ユーザアカウント)がログインした場合、「http://127.0.0.1:8000/dashboard」へ遷移し、
Adminモデル(管理者権限アカウント)がログインした場合は「http://127.0.0.1:8000/admin/dashboard」に遷移するようにしています。

問題は、Adminモデル(管理者権限アカウント)がログイン済みの状態で「http://127.0.0.1:8000/admin/login」をURLに入力すると、「http://127.0.0.1:8000/admin/dashboard」へ遷移せず、「http://127.0.0.1:8000/login」へ遷移します。
(上記参考サイトの「ログイン後のリダイレクト」の問題で止まっています。)

上記参考サイトでは「RedirectIfAuthenticated.php」にてGuardによるリダイレクトを行っているのですが、
Laravel11から「RedirectIfAuthenticated.php」が無くなりました。

自分で試したこと

「bootstrap/app.php」の「withMiddleware」メソッド配下に「redirectGuestsTo」を追加したのですが、上記事象は解決しませんでした。

「redirectGuestsToメソッド」の中の$requestを確認したところ、この時点で「http://127.0.0.1:8000/dashboard」になっていました。

どなたかヒントだけでもいただけますと幸いです。よろしくお願いいたします。

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();

0

2Answer

Illuminate\Auth\Middleware\RedirectIfAuthenticatedを継承したものを使えば意図したことが可能になります。
ただ、breezeはマルチ認証を考慮したつくりになっていないので、手を出すのはやめた方がいいと思いますよ。
まだ Role+認可のほうがシンプルに使えます。

0Like

ご回答ありがとうございます...!
そうなんですね...。
諸事情によりbreezeの利用が必要でした...

すみません!追加で質問させてください。
「Role+認可」の方法というのは、既存のUserアカウントに「Role」カラムを追加し、
その値でリダイレクト先を制御する、という方法の認識で合っておりますでしょうか?

0Like

Comments

  1. 「Role+認可」の実装は要件次第なのでなんとも言えません。
    リダイレクト先に関してはアクセスするディレクトリで分岐する方法もとれます。

Your answer might help someone💌