@oomri444

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Laravel】ログイン後のリダイレクト先でログイン状態が保持されない

Q&A

Closed

ログイン後のリダイレクト先でログイン状態が保持されない

Laravel11でWebアプリをつくっています。
userテーブルではないテーブルのカラムでログインするため、ログインを自作しています。
ログイン画面でID(userテーブルから変更)とパスワードを入力し、
認証済みの状態でのみ遷移できるように/profileを設定しましたが、/profileに遷移さません。
ログインはできていると認識しています(後述)。
解決方法を教えて下さい。

発生している問題・エラー

エラーは出ていません。
想定:/loginで入力してログインボタン押下、/profileに遷移してviewを表示
実際:/loginで入力してログイン押下、/loginに戻ってくる

該当するソースコード

auth.php

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    ],

UserController

public function login(Request $request)
    {
        $credentials = $request->only('user_name', 'password');

        if (Auth::guard('web')->attempt($credentials)) {
            // 認証成功
            session()->regenerate();
            return redirect()->intended('profile');
        } else {
            // 認証失敗
            return redirect()->back()->withErrors(['message' => '認証に失敗しました']);
        }
    }

Web.php

Route::middleware('auth:web')->group(function (){
    Route::get('/profile',[UserController::class,'profile'])->name('profile');
});

自分で試したこと

・UserControllerのloginメソッド内でAuth::user();
→ユーザ情報を取得できる。
→ログイン自体はできていると判断。

・UserControllerのloginメソッド内の最後にreturn view('profile');
→ユーザ情報を表示させる画面が表示できる。
→実装済みの処理にリダイレクトさせたいので削除。

・UserControllerのloginメソッド内にsession()->all());
→セッション情報の中にログインユーザに関してのものは存在しなかった。

「こういう情報が足りない」などあればご指摘いただければと思います。

0 likes

2Answer

まずセッションそのものが機能しているかどうかを確認してみるのはどうでしょうか?
例えば「適当なページの間で値を保持できているか」などで確認できます。

こうすることで問題を切り分けることができます。セッションが機能していれば、セッションに情報を入れたり参照したりする部分に問題があるかもしれません。

セッションが機能していなければ、設定を確認してみましょう。例えばドライバーがarrayになっていたりしないでしょうか?

参考になれば幸いです。

0Like

解決しました。

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Factories\HasFactory;

class Admin extends Authenticatable
{
    use HasFactory;
    protected $table = 'admin';
    protected $fillable = [
        //カラム名
    ];
    public function getAuthIdentifierName()
    {
        return 'プライマリキーのカラム名';
    }
    public function getAuthIdentifier()
    {
        return $this->プライマリキーのカラム名;
    }
}
0Like

Your answer might help someone💌