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

Laravel9安装spatie/permissions后Auth::user()在控制器返回null

解决Laravel 9安装spatie/permissions后控制器中Auth::user()返回null的问题

常见原因及修复方案

  • 中间件顺序错误
    spatie/permissions的role或permission中间件如果排在Authenticate(或auth)中间件之前,会导致权限校验时用户还未完成认证。
    打开app/Http/Kernel.php,确保web中间件组里认证中间件在前:

    protected $middlewareGroups = [
        'web' => [
            // ...其他中间件
            \App\Http\Middleware\Authenticate::class,
            \Spatie\Permission\Middlewares\RoleMiddleware::class,
            \Spatie\Permission\Middlewares\PermissionMiddleware::class,
        ],
    ];
    
  • 路由未关联web中间件
    若控制器路由未加入web中间件组,会话和认证Cookie无法加载,Auth自然获取不到用户。检查routes/web.php,确保路由在web中间件包裹下,或手动添加:

    Route::middleware(['web'])->group(function () {
        // 你的控制器路由
    });
    
  • spatie配置守卫不匹配
    打开config/permission.php,确认默认守卫和项目使用的一致(通常是web):

    'default_permission_guard' => 'web',
    

    同时检查models下的user模型路径是否正确指向你的User类:

    'models' => [
        'user' => App\Models\User::class,
        // ...其他模型配置
    ],
    
  • 控制器构造函数过早调用Auth
    直接在控制器构造函数里调用Auth::user()会返回null,因为此时认证中间件还未执行。可以把用户相关逻辑放到控制器方法中,或者用中间件闭包延迟加载:

    public function __construct()
    {
        $this->middleware(function ($request, $next) {
            $this->user = Auth::user(); // 此处可正常获取用户
            return $next($request);
        });
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:27:31