Laravel Spatie权限中间件报错403 USER IS NOT LOGGED IN的解决求助
Laravel Spatie权限中间件报错403 USER IS NOT LOGGED IN的解决求助
我刚上手Laravel的Spatie权限扩展包,最近在一步步调试代码问题时碰到了个卡壳的情况:
当我访问没有加中间件保护的登录相关路由时,完全可以正常打开登录页面,也能提交登录请求;但一旦尝试访问带有role:admin中间件保护的后台仪表盘路由,就会触发403错误,提示“USER IS NOT LOGGED IN”。
目前的路由设置
- 未受保护的登录路由(可以正常访问和使用):
Route::get('/adminLogin', function () { return view('adminLogin'); }); Route::post('/adminLogin', [AccountsController::class, 'adminLogin'])->name('login.admin');
- 受中间件保护的仪表盘路由(访问就报错403):
Route::group(['middleware' => ['role:admin']], function () { Route::get('/admindashboard', function () { return view('admindashboard'); }); });
相关配置文件
Kernel.php中的中间件别名配置
protected $middlewareAliases = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class, 'signed' => \App\Http\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, 'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class, 'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class, ];
config/auth.php配置
<?php return [ 'defaults' => [ 'guard' => 'accounts', 'passwords' => 'accounts', ], 'guards' => [ 'accounts' => [ 'driver' => 'session', 'provider' => 'accounts', ], ], 'providers' => [ 'accounts' => [ 'driver' => 'eloquent', 'model' => App\Models\Accounts::class, 'table' => 'accounts' ], ], 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_reset_tokens', 'expire' => 60, 'throttle' => 60, ], ], 'password_timeout' => 10800, ];
登录控制器方法
public function adminLogin(Request $request){ $credentials = [ 'username' => $request->username, 'password' => $request->password, ]; if (Auth::attempt($credentials)){ return redirect('admindashboard'); } else { dd('Authentication failed'); return back(); } }
我已经确认登录时Auth::attempt($credentials)是返回true的,会跳转到仪表盘路由,但一到跳转后的页面就触发403错误。有没有大佬能帮忙看看问题出在哪,该怎么解决?
备注:内容来源于stack exchange,提问作者user23272915
相关产品推荐
相关产品推荐

