Laravel 9用户登录认证异常:已登录但auth()->check()返回未登录
解决Laravel 9 Auth登录后
auth()->check()始终返回false的问题 问题根源分析
你的代码存在几个核心问题,导致Laravel Auth组件无法正确识别已登录用户:
- User模型默认关联
users表,但你的注册、登录逻辑使用的是自定义表mania_adminauth,Auth组件无法匹配用户数据 - 注册时通过自定义
commonModal插入数据,没有使用Laravel的User模型实例,导致Auth无法正确加载用户会话 - 登录时手动存储
LoggedUser会话,但Auth组件依赖自身的会话机制,手动操作会干扰认证状态
修复步骤
1. 修正User模型的表名与可填充字段
在App\Models\User.php中指定正确的表名,并添加批量赋值字段:
<?php namespace App\Models; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class User extends Authenticatable { use HasFactory, Notifiable; // 指定自定义表名 protected $table = 'mania_adminauth'; // 允许批量赋值的字段 protected $fillable = [ 'firstName', 'lastName', 'email', 'number', 'password', 'createdOn', ]; // 隐藏敏感字段(可选) protected $hidden = [ 'password', ]; }
2. 重构注册逻辑,使用User模型创建用户
替换自定义commonModal的插入操作,直接用User模型创建用户,然后通过Auth::login完成自动登录:
public function customRegistration(Request $request) { $request->validate([ 'firstName' => 'required', 'email' => 'required|email|unique:mania_adminauth', 'number' => 'required|min:10|max:10', 'password' => 'required|min:6', ]); // 使用User模型创建用户 $user = User::create([ 'firstName' => $request->firstName, 'lastName' => $request->lastName, 'email' => $request->email, 'number' => $request->number, 'password' => Hash::make($request->password), 'createdOn' => Carbon::now()->timestamp, ]); if ($user) { // 直接登录用户实例,无需再次调用attempt Auth::login($user); return redirect("dashboard"); } else { return view('admin.common.registration')->with('fail','Something Went Wrong !!'); } }
3. 简化登录函数,移除多余会话操作
Auth::attempt成功后会自动维护认证会话,无需手动存储LoggedUser:
public function authLogin(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required|min:5|max:12', ]); $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { // 移除手动存储session的代码 return redirect('dashboard'); } else { return redirect("/")->with('fail','Please check mail id & password !'); } }
4. 确认认证配置正确性
检查config/auth.php中的providers配置,确保指向正确的User模型:
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], ],
验证效果
完成以上修改后,重新测试登录和注册流程,此时Blade模板中的auth()->check()会正确返回true,页面显示User is login.
内容的提问来源于stack exchange,提问作者clash gamers
相关产品推荐
相关产品推荐

