Laravel Pulse适配非默认Guard时出现403问题求助及方案建议
我曾在GitHub提交该问题,但2小时内被关闭,回复为“前往其他平台寻求解答”,想确认自己是否操作有误。
我的系统为管理员配置了非默认的认证守卫,默认配置如下:
'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ],
该自定义守卫admins使用AdminUser模型而非默认的User模型,相关配置如下:
- 守卫配置:
'admins' => [ 'driver' => 'session', 'provider' => 'admins', ],
- 提供者配置:
'admins' => [ 'driver' => 'eloquent', 'model' => App\Models\AdminUser::class, ],
我已安装Laravel Nova并修改其默认守卫为admins,同时在AuthServiceProvider中配置了Pulse权限:
Gate::define('viewPulse', function () { return true; });
但以管理员身份登录Nova后,访问Laravel Pulse始终返回403错误,推测原因是Laravel Pulse无法识别非默认Guard下的管理员登录状态。我认为可以通过在config/pulse.php中添加Pulse使用的守卫配置项解决问题。
复现步骤:
- 创建上述自定义
admins守卫和对应的提供者 - 安装Laravel Nova并修改其默认守卫为
admins - 以管理员身份登录Nova后台
- 在
AuthServiceProvider中添加viewPulse权限配置 - 尝试访问Laravel Pulse,收到403错误
Laravel Pulse默认使用系统默认的web守卫做身份验证,所以即便你用admins守卫登录了Nova,Pulse依然会用web守卫校验登录状态,导致返回403。解决核心是让Pulse使用你的自定义admins守卫,以下两种方法均可:
方法一:手动覆盖Pulse路由
在routes/web.php中添加路由,指定Pulse使用admins守卫的认证中间件:
use Laravel\Pulse\Http\Controllers\DashboardController; Route::get('/pulse', [DashboardController::class, 'show']) ->middleware(['web', 'auth:admins', 'can:viewPulse']);
此方式会强制Pulse路由用admins守卫验证登录状态,同时保留viewPulse的权限检查。
方法二:配置Pulse中间件组(推荐)
打开config/pulse.php,找到或新增middleware配置项,将认证中间件指定为auth:admins:
'middleware' => [ 'web', 'auth:admins', 'can:viewPulse', ],
修改后,Pulse的所有路由都会自动使用admins守卫校验身份。
收尾操作
修改配置后,务必清除配置缓存:
php artisan config:clear
重新登录Nova后,再访问Pulse即可正常进入。
内容的提问来源于stack exchange,提问作者Constantin Necula

