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
相关产品推荐
相关产品推荐

