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

Laravel 10使用laravel/ui auth时Auth::user()读取属性报错

问题原因分析

你把Auth::routes()放到了checkRole中间件组里,而登录、登录处理这类路由是给未登录用户访问的——此时Auth::user()会返回null,直接访问role_id自然触发「Attempt to read property on null」错误。之前用Breeze时路由结构不同,没有把登录路由纳入权限中间件范围,所以没出现这个问题。

解决方案

1. 修正中间件逻辑,先校验登录状态

修改checkRole中间件,先确认用户已登录,再判断角色权限:

public function handle(Request $request, Closure $next): Response
{
    // 未登录用户直接跳转到登录页
    if (!Auth::check()) {
        return redirect()->route('login');
    }

    // 已登录用户再校验角色
    if (Auth::user()->role_id != 1) {
        return redirect()->route("welcomepage");
    } 

    return $next($request);
}

2. 调整路由配置,拆分Auth路由与仪表盘路由

把Auth::routes()移出checkRole中间件组,仅给仪表盘路由同时添加auth和checkRole中间件:

// 单独配置Auth路由,不需要权限校验
Auth::routes(["register" => false, "reset" => false]);

// 仪表盘专属路由,需同时满足登录+角色权限
Route::middleware(["auth", "checkRole"])->group(function() {
    // 示例仪表盘路由,替换为你的实际路由
    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
});

关键说明

auth中间件会确保只有已登录用户能进入该路由组,避免未登录用户触发Auth::user()为null的情况;同时要保证checkRole在auth之后执行,这样Auth::user()一定是有效的用户实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:15:57