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

Laravel API 结合 React 发起POST请求返回401未授权求助

解决POST请求返回401 Unauthorized的思路

首先要明确:401是身份验证失败,不是CSRF令牌问题(CSRF验证失败通常返回419状态码),所以咱们的排查重点要从身份验证入手,而不是继续纠结CSRF配置。下面是具体的排查步骤:

  • 检查路由是否被身份验证中间件包裹
    你提到路由没添加中间件,但要注意Laravel的api.php路由文件默认是被auth:api中间件组包裹的(可以查看RouteServiceProvider里的配置确认)。如果你的klippekort路由是在默认的Route::apiResource或者Route::middleware('auth:api')组里,那后端会要求请求携带有效的API认证凭证,否则就返回401。
    解决方法:把这个路由移出认证中间件组,或者确保前端请求带上正确的认证信息。

  • 确认fetch请求是否携带会话凭证(如果用Session认证)
    如果你的项目用的是传统Session认证(而非API Token),fetch API默认不会自动发送Cookie,导致后端无法识别用户身份,返回401。你需要在fetch选项里添加credentials: 'include':

    fetch('api/klippekort', { 
      method: 'POST', 
      credentials: 'include', // 新增这一行
      headers: { 
        'X-CSRF-TOKEN': this.props.csrf_token, 
        'Accept': 'application/json', 
        'Content-Type': 'application/json', 
      }, 
      body: JSON.stringify({ to_user, hours_spend, hours_max }) 
    }).then(res => console.log(res))
    
  • 查看Laravel日志定位具体原因
    打开storage/logs/laravel.log,找到对应请求的错误日志,里面会明确告诉你是哪个中间件触发的401(比如auth:api还是其他自定义中间件),这能帮你快速锁定问题点。

  • 用工具直接测试路由
    用POSTMAN或者curl发送POST请求到http://localhost/api/klippekort,不带任何认证信息,看看返回结果:

    • 如果还是401:说明路由确实要求身份验证,要么移除中间件,要么在请求中带上正确的凭证(比如用API Token的话,要在headers里加Authorization: Bearer {你的Token})。
    • 如果返回其他状态码(比如422、200):那问题出在前端请求的凭证携带上,检查认证信息是否正确传递。
  • 最后再确认CSRF配置(优先级较低)
    你在VerifyCsrfToken里设置$except = ['api/*']是正确的,但要确保你的路由确实是/api/klippekort(而非其他前缀)。不过因为当前是401错误,这一步不是核心问题。

内容的提问来源于stack exchange,提问作者UnknownFrequency

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:29:08