トップページ
Laravel学習サイトLaravelやるばい

目次

ユーザー登録後・ログイン後のリダイレクト先を動的に変える方法

ここまでのアプリ作成の記事でログイン後のリダイレクト先についてちゃんと説明していなかったので今回は説明の記事になります。


ユーザー登録・ログイン後のリダイレクト先の変更

「Laravelのプロジェクト > app > Providers > RouteServiceProvider.php」に下記の記述があります。

public const HOME = '/dashboard';

「/dashboard」を変更するとリダイレクト先を変更できます。

しかしこの方法だと全員のリダイレクト先が同じ場合は問題ないですが条件によってリダイレクト先を変更したい場合に対応できません。


ログイン後のリダイレクト先を動的にする

「Laravelのプロジェクト > app > Http > Controllers > Auth > AuthenticatedSessionController.php」に下記の記述があります。

public function store(LoginRequest $request): RedirectResponse
{
    $request->authenticate();

    $request->session()->regenerate();

    return redirect()->intended(RouteServiceProvider::HOME);
}

「return redirect ・・・」の記述を下記に変更します。

if (Auth::user()->role_type == 1) {
    return redirect('/stock/create');
} else {
    return redirect('/index');
}

この記述はusersテーブルにrole_typeカラム(integer型)を設定した場合の記述です。

role_typeカラムの値が1なのかそうでないかでログイン先を切り替えています。

redirectの引数がリダイレクト先です。


ユーザー登録後のリダイレクト先を動的にする

「Laravelのプロジェクト > app > Http > Controllers > Auth > RegisteredUserController.php」に下記の記述があります。

public function store(Request $request): RedirectResponse
{
    $request->validate([
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
        'password' => ['required', 'confirmed', Rules\Password::defaults()],
    ]);

    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
    ]);

    event(new Registered($user));

    Auth::login($user);

    return redirect(RouteServiceProvider::HOME);
}

下記に変更します。

public function store(Request $request): RedirectResponse
{
    $request->validate([
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class],
        'password' => ['required', 'confirmed', Rules\Password::defaults()],
    ]);

    $user = User::create([
        'name' => $request->name,
        'email' => $request->email,
        'password' => Hash::make($request->password),
        'role_type' => User::count() == 0 ? 1 : 2         //この行を追加
    ]);

    event(new Registered($user));

    Auth::login($user);

    // return redirect(RouteServiceProvider::HOME);     //この行を削除


    //下記に変更
    if ($user->role_type == 1) {
        return redirect('/stock/create');
    } else {
        return redirect('/index');
    }
    //ここまで


}

これでユーザー登録後のリダイレクト先をrole_typeカラムの値が1かそうでないかで変更できます。

ユーザー登録・ログイン後のリダイレクト先は簡単に変更できるのでぜひあなたが作ったアプリに導入して下さい。




戻る