You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:10:33