Laravel Sanctum 本地模拟子域名环境Cookie无法正常存储问题求助
解决方案
- 修正本地访问入口:本地开发不要使用
localhost:8080访问前端,必须使用你配置的子域名入口,例如companyone.mydomain.com:8080,保证当前页面域名和Cookie要写入的域名匹配。 - 调整Sanctum状态域配置:修改.env文件的
SANCTUM_STATEFUL_DOMAINS,需要补全所有带端口的前端访问域名,示例配置:
SESSION_DOMAIN=.mydomain.com SANCTUM_STATEFUL_DOMAINS=mydomain.com:8080,companyone.mydomain.com:8080,companytwo.mydomain.com:8080
- 适配本地开发的Cookie参数:本地开发走HTTP协议,而
SameSite=None要求必须配合Secure=true且运行在HTTPS环境下,HTTP场景下无法生效,修改Cookie基础配置:
// 本地开发环境配置,线上HTTPS环境按需调整回原配置 $domain = '.mydomain.com'; $secure = false; $httpOnly = true; $sameSite = 'lax';
- 修正前端代理与请求配置
- 调整vue.config.js的代理配置,开启
changeOrigin保证请求头host正确传递:
- 调整vue.config.js的代理配置,开启
module.exports = { devServer: { disableHostCheck: true, proxy: { '/api': { // 按你实际的接口前缀调整 target: 'http://localhost:8000', changeOrigin: true, } }, }, };
- 全局配置axios开启凭证携带:
axios.defaults.withCredentials = true;
- 修正后端CORS配置:打开
config/cors.php,确保以下配置正确:
return [ 'paths' => ['api/*', 'sanctum/csrf-cookie'], // 覆盖你所有需要跨域的接口路径 'supports_credentials' => true, 'allowed_origins' => ['*'], // 线上环境建议替换为实际的业务域名 'allowed_headers' => ['*'], 'allowed_methods' => ['*'], ];
配置完成后清空浏览器现有Cookie,重启前后端服务,重新用子域名入口访问即可生效。
内容的提问来源于stack exchange,提问作者Thore
相关产品推荐
相关产品推荐

