Laravel 11 + React 登出请求401未授权问题求助
1. 前端请求凭证检查
React发起登出请求时,必须携带会话Cookie才能通过Sanctum身份验证,重点检查:
- 确认请求配置中开启凭证传递:Axios需设置
withCredentials: true,Fetch需设置credentials: 'include',示例:
// Axios登出请求示例 axios.post('/api/logout', {}, { withCredentials: true })
- 检查
AppHeaderDropdown.js中的登出调用是否继承了正确的请求配置,有没有遗漏凭证参数。
2. Sanctum配置验证
打开sanctum.php配置文件:
- 确认
stateful数组包含前端域名(含端口),比如:
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( '%s%s', 'localhost:3000,', env('APP_URL') ))),
- 检查
expiration值是否合理,避免会话提前过期导致验证失败。
3. CORS配置修正
打开cors.php:
- 强制开启凭证支持:
'supports_credentials' => true,
- 确认
allowed_origins包含前端域名,开发环境可临时设为['*']:
'allowed_origins' => ['http://localhost:3000'],
- 确保
allowed_methods包含POST方法(登出接口通常为POST请求):
'allowed_methods' => ['*'],
4. 登出接口逻辑验证
检查AuthController.php中的登出方法:
- 确保使用Sanctum兼容的web guard执行登出,同时销毁会话:
public function logout(Request $request) { auth()->logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return response()->json(['message' => 'Logged out successfully']); }
- 确认路由已绑定
auth:sanctum中间件:
Route::post('/logout', [AuthController::class, 'logout'])->middleware('auth:sanctum');
5. 请求头与Cookie对比
对比Postman和React的请求日志:
- 检查React请求是否携带
X-XSRF-TOKEN头,Axios默认会自动读取Cookie中的XSRF-TOKEN并设置该头,但需开启withCredentials。 - 确认Cookie中存在
laravel_session和XSRF-TOKEN,若缺失说明前端未正确接收或发送Cookie。
6. 会话域配置检查
修改.env文件中的SESSION_DOMAIN:
- 开发环境设置为
localhost(无需加端口):
SESSION_DOMAIN=localhost
- 确保该值与Sanctum的
stateful域名匹配。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

