Laravel多域名Cookie冲突:解决父域与second.domain.com的Sanctum CSRF问题
解决多Laravel应用跨子域XSRF-TOKEN冲突问题
针对你遇到的父域(.domain.com)与独立子域(second.domain.com)因XSRF-TOKEN Cookie重名导致的CSRF验证失败问题,以下是最直接的解决方案:
修改子域应用的XSRF-TOKEN Cookie名称(推荐)
由于Laravel Sanctum默认的XSRF-TOKEN Cookie名称固定,我们只需为second.domain.com的应用配置唯一的Cookie名称,即可彻底避免冲突:
配置后端Cookie名称
打开config/sanctum.php文件,找到csrf_cookie_name配置项,将其修改为专属名称(比如SECOND_XSRF-TOKEN):'csrf_cookie_name' => env('SANCTUM_CSRF_COOKIE_NAME', 'SECOND_XSRF-TOKEN'),也可以通过
.env文件设置,更便于环境管理:SANCTUM_CSRF_COOKIE_NAME=SECOND_XSRF-TOKEN同步前端请求配置
如果前端使用Axios发起请求,需同步调整读取的Cookie名称:axios.defaults.xsrfCookieName = 'SECOND_XSRF-TOKEN'; // 请求头保持默认的X-XSRF-TOKEN即可,Laravel后端会自动识别 axios.defaults.xsrfHeaderName = 'X-XSRF-TOKEN';若使用其他HTTP客户端,确保对应配置读取你自定义的Cookie名称,并在请求头中携带
X-XSRF-TOKEN(若自定义头,需同步修改后端中间件的验证逻辑)。清理旧Cookie
让用户清除浏览器中残留的XSRF-TOKENCookie,或强制刷新页面,确保新的自定义Cookie生效。
额外说明
父域与first.domain.com的Cookie共享逻辑无需变动,保持SESSION_DOMAIN为.domain.com即可。修改second.domain.com的XSRF Cookie名称后,两个应用的Cookie将各自独立,不会再出现冲突。
内容的提问来源于stack exchange,提问作者John Mellor
相关产品推荐
相关产品推荐

