Laravel+Vue3 SPA跨域登录出现401状态码问题求助
跨域登录返回401的排查与解决
1. 修正Laravel的CORS配置
打开config/cors.php,确保以下配置正确:
supports_credentials必须设为true(跨域带Cookie的核心开关)allowed_origins要包含前端域名http://frontend.task.com(根据实际协议改http/https)allowed_headers要包含X-XSRF-TOKEN、Content-Type这些必要头exposed_headers需加入X-XSRF-TOKEN,让前端能读取到令牌
示例关键配置片段:
return [ 'paths' => ['api/*', 'login', 'logout'], 'allowed_methods' => ['*'], 'allowed_origins' => ['http://frontend.task.com'], 'allowed_headers' => ['X-XSRF-TOKEN', 'Content-Type', 'Authorization'], 'exposed_headers' => ['X-XSRF-TOKEN'], 'supports_credentials' => true, ];
2. 确保XSRF令牌正确传递
- 先在浏览器开发者工具的「Application -> Cookies」里检查:是否存在
XSRF-TOKENCookie,域名是否为.task.com - 如果axios自动带令牌失效,手动加请求拦截器补全:
axios.interceptors.request.use(config => { const xsrfToken = document.cookie.match(/XSRF-TOKEN=([^;]+)/)?.[1]; if (xsrfToken) { config.headers['X-XSRF-TOKEN'] = decodeURIComponent(xsrfToken); } return config; });
3. 检查Laravel会话配置
.env里SESSION_DRIVER不能是array(内存驱动不持久化会话,重启就丢),换file或databaseSESSION_SECURE_COOKIE要和前端协议匹配:前端用HTTPS就设true,HTTP设false,否则Cookie传不过去SESSION_SAME_SITE设为lax或none(HTTPS跨域用none),别设strict,不然跨域请求不会带Cookie
4. 验证登录响应的Cookie
登录接口返回成功后,看响应头的Set-Cookie:必须包含laravel_session,且域名是.task.com、路径为/
5. 排查浏览器跨域限制
- 看浏览器Console有没有CORS报错,比如提示
Access-Control-Allow-Credentials未开启 - 前端和后端必须用同一种协议(全HTTP或全HTTPS),混合协议会导致Cookie无法传递
内容的提问来源于stack exchange,提问作者Jawad Ahmad
相关产品推荐
相关产品推荐

