Laravel Sanctum针对有状态API请求重复生成XSRF-TOKEN的问题排查与优化求助
Laravel Sanctum针对有状态API请求重复生成XSRF-TOKEN的问题排查与优化求助
大家好,我现在用Laravel Sanctum给NuxtJS的SPA做请求授权,基本逻辑是懂的——登录前先通过axios请求/sanctum/csrf-cookie接口获取XSRF-TOKEN,之后在会话有效期内用这个token做后续API请求。但现在遇到了两个棘手的问题,折腾了好几个配置都没解决,想请教下各位:
首先,在调用/sanctum/csrf-cookie之前,每一次API请求都会触发Laravel生成新的XSRF-TOKEN并通过Set-Cookie头返回。比如首页加载时要发4个请求拿渲染数据,每个请求的响应头里都带Set-Cookie: XSRF-TOKEN,还会一次次覆盖前端已有的token。举个例子,其中一个响应头里的Set-Cookie字段大概是这样的:
Set-Cookie: XSRF-TOKEN=eyJpdiI6Ik...; expires=Wed, 10 Jul 2024 12:34:56 GMT; Max-Age=7200; path=/; domain=localhost; HttpOnly; SameSite=Lax
其次,调用/sanctum/csrf-cookie接口时的响应头也很奇怪:它不仅返回新的XSRF-TOKEN(和其他API请求一样),还会额外返回一个格式类似的Cookie,比如some_uuid=eyJpdiI6Il...,看起来和XSRF-TOKEN的结构差不多。
说下我的环境和试过的配置:
- 前后端都在本地用docker-compose部署,
SANCTUM_STATEFUL_DOMAINS设为localhost,试过改其他值没效果 - 调整过Session相关配置,试过的参数组合包括:
SESSION_DRIVER=cookie/redis/databaseSESSION_LIFETIME=120SESSION_ENCRYPT=falseSESSION_PATH=/SESSION_DOMAIN=null/localhost
- Laravel版本是11,已经在
bootstrap/app.php里配置了$middleware->statefulApi(); - 路由试过使用
api中间件 - Axios配置已经开启了
withCredentials: true和withXSRFToken: true
现在我想搞清楚:
- 为什么Laravel会在每个API请求都生成新的XSRF-TOKEN?
- 怎么优化后端,减少这种无意义的token生成开销?
- 如何避免这种重复覆盖token可能导致的前后端token同步问题?
内容来源于stack exchange
相关产品推荐
相关产品推荐

