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
相关产品推荐
相关产品推荐

