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

Laravel Sanctum跨子域SPA认证出现401未授权问题求助

解决Laravel Sanctum SPA认证api/user返回401的问题

以下是针对你的场景的排查和修复步骤:

1. 修正Laravel .env配置

  • SESSION_SECURE_COOKIE:你的站点使用HTTPS,必须将其设为true,否则浏览器不会在HTTPS请求中携带非Secure标记的Cookie:
    SESSION_SECURE_COOKIE=true
    
  • SANCTUM_STATEFUL_DOMAINS:移除协议前缀,只保留域名(Sanctum会自动适配HTTPS):
    SANCTUM_STATEFUL_DOMAINS=test.example.com
    

2. 检查Laravel CORS配置

打开config/cors.php,确保以下配置正确:

  • allowed_origins 包含前端完整域名:
    'allowed_origins' => ['https://test.example.com'],
    
  • supports_credentials 设置为true(这是跨域场景下传递Cookie的核心配置):
    'supports_credentials' => true,
    
  • allowed_headers 包含认证相关头信息:
    'allowed_headers' => ['X-Requested-With', 'Content-Type', 'XSRF-TOKEN', 'Authorization'],
    

3. 清理前端Axios冗余配置

前端Axios中设置的Access-Control-Allow-Origin和Access-Control-Allow-Methods属于后端响应头,前端无需配置,删除这两项后修正配置:

import Axios from 'axios'

const axios = Axios.create({
    baseURL: process.env.NEXT_PUBLIC_BACKEND_URL,
    headers: {
        'X-Requested-With': 'XMLHttpRequest',
    },
    withCredentials: true,
})

export default axios

4. 验证Cookie传递状态

登录成功后,在浏览器开发者工具的Application标签下,检查Cookies列表:

  • 确认存在laravel_session和XSRF-TOKEN两个Cookie
  • 检查它们的Domain为.example.com,Secure标记为true

5. 清除Laravel配置缓存

修改配置后执行以下命令清除缓存,确保新配置生效:

php artisan config:clear
php artisan cache:clear

完成以上步骤后,重新测试api/user接口,即可正常返回已认证用户信息。

内容的提问来源于stack exchange,提问作者Joy Ram Sen Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:36:35