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

Laravel Sanctum CSRF保护配置疑问:未触发Token校验异常

Laravel Sanctum CSRF保护问题解析

核心逻辑:Sanctum的CSRF校验只针对特定场景

Sanctum的CSRF保护并非对所有auth:sanctum路由强制校验,它只针对浏览器发起的跨域会话请求——也就是当你的SPA通过Cookie维持登录会话时,才会强制要求请求携带XSRF-Token请求头。

Postman这类非浏览器客户端不在这个校验范围内,因为Sanctum默认认为这类请求会使用API令牌(Bearer Token)做认证,而非会话Cookie+CSRF的组合模式,所以不会触发CSRF Token Mismatch异常。

验证配置是否正确的步骤

  • 用SPA实际测试:在你的SPA中发起跨域请求,故意不携带XSRF-Token,此时应该触发CSRF错误,这才说明保护生效。
  • 检查Sanctum配置:
    打开config/sanctum.php,确认stateful数组包含你的SPA域名,示例:
    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', 'localhost:3000,127.0.0.1:3000')),
    
    同时.env文件里的SESSION_DOMAIN要设置正确:本地开发可设为localhost,线上同主域场景设为.yourdomain.com。
  • 检查CORS配置:
    打开config/cors.php,确保supports_credentials为true,allowed_origins包含你的SPA域名,allowed_headers中包含XSRF-TOKEN。

关于Postman能正常访问的额外说明

如果你的/user路由在auth:sanctum下但Postman能正常访问,大概率是以下两种情况:

  1. 请求使用了API令牌(比如请求头携带Authorization: Bearer {token}),此时Sanctum用令牌认证,不校验CSRF。
  2. login路由本身未添加auth:sanctum中间件,它的作用是生成会话或令牌,本身不需要CSRF保护,所以无Token也能正常响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:40:03