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

Laravel 11 + React 登出请求401未授权问题求助

排查Laravel Sanctum + React登出401 Unauthorized问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:02:01