Laravel Sanctum Cookie认证遭遇401 Unauthorized问题求助
确认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-TOKENCookie,前端需将其值放入请求头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中间件; - 可新增测试接口验证认证状态:
发起请求看是否返回用户信息,以此区分是中间件问题还是Cookie传递问题。Route::get('/test-auth', function () { return auth()->user(); })->middleware('auth:sanctum');
- 确认用户列表接口已挂载
浏览器隐私设置排查
检查浏览器是否开启“阻止第三方Cookie”,开发环境下前后端域名不同时,Cookie可能被识别为第三方而无法携带,可临时关闭该设置测试。
内容的提问来源于stack exchange,提问作者Azay Karimli
相关产品推荐
相关产品推荐

