Laravel 9中Passport在web路由无法获取Auth::user()的问题求助
Laravel Passport Web路由认证问题解决方案
问题根源
将web guard的driver直接改为passport是错误配置——Passport的passport驱动仅适配API的token认证场景,Web路由默认依赖session认证体系,两者逻辑不兼容,导致系统无法识别已登录状态。
具体修复步骤
1. 恢复web guard的默认配置
修改config/auth.php,将web guard的driver改回session:
'guards' => [ 'web' => [ 'driver' => 'session', // 改回session驱动 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
2. 按需配置Web路由的Passport认证
如果确实需要在Web路由中使用Passport的token认证,需做以下调整:
- 将Web路由的中间件指定为
auth:api,而非默认的auth:
Route::middleware('auth:api')->group(function () { Route::name('google.index')->get('google', [ExampleTwoController::class, 'index']); });
- 在
app/Http/Kernel.php的web中间件组中添加Passport的cookie token注入中间件,确保请求自动携带认证token:
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
3. 适配登录流程
- 若使用默认Web登录(session认证):无需修改guard配置,直接使用
auth中间件即可正常获取Auth::user()。 - 若使用Passport OAuth流程登录Web应用:需确保已执行
Passport::routes()注册授权路由,并使用Passport提供的登录逻辑完成认证。
4. 清除缓存确保配置生效
执行命令刷新配置缓存:
php artisan config:clear php artisan cache:clear
内容的提问来源于stack exchange,提问作者B.T
相关产品推荐
相关产品推荐

