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

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-TOKEN Cookie,域名是否为.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或database
  • SESSION_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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:32:45