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

Laravel多认证系统admin路由调用Auth::user()->id报null属性读取错误

问题原因

错误Attempt to read property "id" on null本质是Auth::user()返回了null,说明当前请求没有通过预期的认证 guard 拿到登录用户信息。
你在默认example.com/login路由下测试正常,是因为默认路由用的是Laravel自带的web guard,而你新增的admin路由组没有绑定自定义的admin guard,Auth门面默认读取web guard的登录态,你未登录普通用户的情况下自然返回空。

修复方案
  • 确认admin guard配置
    先检查config/auth.php里的guards配置,确认你新增的admin guard名称,常规配置参考:
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'admin' => [ // 此处为你的admin guard名称
            'driver' => 'session',
            'provider' => 'admins',
        ],
    ],
    
  • 给admin路由组绑定guard中间件
    所有admin相关路由统一加上auth:admin中间件,指定用admin guard做认证,示例:
    Route::prefix('admin')->middleware('auth:admin')->group(function () {
        // 所有admin后台路由都放该分组内
        Route::get('/test', function () {
            dd(Auth::guard('admin')->user()->id);
        });
    });
    
  • 调用Auth时明确指定guard
    若不需要给整个路由组加中间件,单独调用时要指定对应guard,不能直接用Auth::user(),写法调整为:
    dd(Auth::guard('admin')->user()->id);
    
  • 校验admin登录逻辑的guard配置
    实现admin登录功能时,也要指定对应guard做登录校验,示例逻辑:
    if (Auth::guard('admin')->attempt($credentials)) {
        // 登录成功后的跳转逻辑
    }
    
排查验证方法

你可以在admin路由下输出所有guard的登录态快速定位问题:

dd([
    'web_guard用户' => Auth::guard('web')->user(),
    'admin_guard用户' => Auth::guard('admin')->user(),
]);

可以直接看到哪个guard下存在有效的登录用户信息。


内容的提问来源于stack exchange,提问作者Mahdi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 06:48:05