You need to enable JavaScript to run this app. 已部署的Laravel Sanctum应用无法运行 共享主机Vue Axios请求报401错误
优惠活动
大模型
产品
解决方案
定价
更多

已部署的Laravel Sanctum应用无法运行 共享主机Vue Axios请求报401错误

共享主机部署后Sanctum鉴权401修复方案

先修正代码本身的配置错误

你当前的bootstrap.js存在会直接导致鉴权失效的顺序问题:

  • 现有代码先对window.axios.defaults.withCredentials赋值,但此时window.axios还未完成初始化,只是给临时空对象设置了无效属性;后续require('axios')会把真正的Axios实例覆盖到window.axios上,之前设置的跨域携带Cookie的配置完全不会生效。
  • 修正后的配置顺序,必须先引入Axios实例,再设置全局参数:
window.axios = require('axios');
window.axios.defaults.withCredentials = true;
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

对齐生产环境的Sanctum配置

本地环境能正常运行,说明业务逻辑没有核心问题,部署后失效大多是环境配置和线上域名不匹配:

  • 检查根目录.env的核心参数,不能保留本地开发的配置:
    • APP_URL=http://foo.xyz,和实际访问的站点地址完全一致
    • SANCTUM_STATEFUL_DOMAINS=foo.xyz,www.foo.xyz,把所有用户可能访问的域名形式都纳入允许列表,漏写任意一种都会触发鉴权失败
    • SESSION_DOMAIN=.foo.xyz,前面的点号保证主域、www子域之间的Cookie可以共享,避免不同域名形式的Session不互通
  • 清理本地缓存后再上传代码:
    • 不要把本地bootstrap/cache目录下的配置、路由缓存文件传到主机,这类文件写死了本地开发环境的地址参数,会直接覆盖生产配置
    • 代码上传完成后,在主机端执行php artisan config:clear、php artisan route:clear、php artisan cache:clear,清除残留的旧缓存
  • 确认storage目录权限正常:storage/framework/sessions、storage/framework/cache目录必须对PHP运行用户开放读写权限,权限不足会导致Session无法正常存储,CSRF校验没有匹配的凭证就会返回401。

排查请求链路的异常

你提供的控制台报错显示,请求实际打到了http://foo.xyz/city,但代码里定义的接口路径是/api/city,存在路径不匹配的问题:

  • 检查共享主机的伪静态/重写规则,确认/api/*开头的请求会正确指向Laravel入口文件,不会被规则拦截去掉/api前缀,导致请求没有进入带Sanctum鉴权的API路由组,反而命中web路由组的受保护接口,触发401。
  • 应用初始化阶段,在所有业务API请求发送前,先发起一次/sanctum/csrf-cookie的请求,提前在浏览器写入鉴权需要的Cookie。本地开发时浏览器已经存储过对应Cookie,不会暴露这个问题,切换到线上域名后没有历史Cookie,不提前完成这一步就会直接鉴权失败。
  • 如果站点没有配置HTTPS,需要关闭session配置里的secureCookie选项,否则浏览器会直接拒绝存储鉴权Cookie,请求不会携带任何有效凭证。

内容的提问来源于stack exchange,提问作者ORHAN ERDAY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 22:06:02