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

Laravel Sanctum Cookie认证遭遇401 Unauthorized问题求助

排查Vue3 + Laravel HttpOnly Cookie认证401问题的关键步骤
  • 确认Cookie是否实际携带
    打开浏览器开发者工具(F12)的Network标签,发起用户列表请求后查看请求头的Cookie字段,确认是否包含laravel_session和XSRF-TOKEN(使用Sanctum时)。
    如果Cookie未携带:

    • 核对前端域名与后端SESSION_DOMAIN是否匹配,比如前端是admin.sample.com,后端需设为.sample.com,注意不要有多余空格或符号。
    • 确保withCredentials: true已生效,Axios可全局配置axios.defaults.withCredentials = true,或单个请求明确设置。
  • 检查Sanctum的CSRF Token处理
    登录成功后后端会返回XSRF-TOKEN Cookie,前端需将其值放入请求头X-XSRF-TOKEN中,可在Vue3请求拦截器中处理:

    axios.interceptors.request.use(config => {
      const xsrfToken = document.cookie.match(/XSRF-TOKEN=([^;]+)/)?.[1]
      if (xsrfToken) {
        config.headers['X-XSRF-TOKEN'] = decodeURIComponent(xsrfToken)
      }
      return config
    })
    

    同时确认config/sanctum.php的stateful数组包含前端具体域名(如['admin.sample.com']),不要用通配符。

  • 验证Session核心配置

    • 检查.env的SESSION_DRIVER:用file驱动时确保storage/framework/sessions目录有读写权限;用redis等驱动需确认服务正常运行。
    • SESSION_SECURE_COOKIE:前端HTTP访问时设为false,HTTPS访问时设为true,否则浏览器不会保存Cookie。
    • SESSION_SAME_SITE:开发环境可设为lax或none(HTTPS场景),设为strict可能导致跨域请求无法携带Cookie。
  • 排查CORS配置细节
    打开config/cors.php:

    • paths需包含用户列表接口路由(如api/users/*);
    • allowed_methods要覆盖请求方法(如GET);
    • allowed_origins需明确写前端域名(如['http://admin.sample.com']),不能用*(*与withCredentials无法共存);
    • allowed_headers要包含X-XSRF-TOKEN,或直接设为['*'];
    • supports_credentials必须设为true。
  • 检查路由与中间件

    • 确认用户列表接口已挂载auth:sanctum中间件;
    • 可新增测试接口验证认证状态:
      Route::get('/test-auth', function () {
          return auth()->user();
      })->middleware('auth:sanctum');
      
      发起请求看是否返回用户信息,以此区分是中间件问题还是Cookie传递问题。
  • 浏览器隐私设置排查
    检查浏览器是否开启“阻止第三方Cookie”,开发环境下前后端域名不同时,Cookie可能被识别为第三方而无法携带,可临时关闭该设置测试。

内容的提问来源于stack exchange,提问作者Azay Karimli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:27:11