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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 09:38:12