Laravel 8 + Sanctum Postman调用/api/login成功但后续接口未认证问题
Laravel Sanctum Postman 认证异常解决方案
问题根因
你遇到的是Postman模拟SPA Sanctum认证时,未完整携带必要认证信息导致的鉴权失败,Axios能正常访问是因为默认配置了withCredentials: true自动携带Cookie,同时会自动处理XSRF-TOKEN头。
分步解决操作
1. 先确认Laravel侧配置正确
.env文件添加/修改以下配置:SESSION_DOMAIN=localhost SANCTUM_STATEFUL_DOMAINS=localhost:8000,localhost- 如果你将
/api/login路由定义在routes/api.php中,需要给该路由单独添加web中间件,因为API默认中间件组不带会话启动逻辑,无法生成登录态:Route::post('/login', [AuthController::class, 'login'])->middleware('web');
2. 修正Postman配置
- 你当前的预请求脚本无需修改,建议把该脚本配置到整个接口集合的「Pre-request Script」栏,不要只配置给单个登录接口,这样所有请求都会自动刷新CSRF令牌
- 给整个接口集合统一添加公共请求头,避免每个接口单独配置:
头字段名 字段值 说明 Accept application/json必须配置, Sanctum通过该头识别SPA请求 X-XSRF-TOKEN {{xsrf-token}}读取预请求脚本存入环境变量的CSRF令牌 - 开启Postman Cookie自动携带:
点击请求页右上角的「Settings」按钮,开启Send cookies with request和Automatically follow redirects选项
3. 验证生效步骤
- 打开Postman的Cookie管理器,删除所有
localhost域下的旧Cookie,避免旧无效会话干扰 - 先发送一次登录请求,确认返回登录成功提示,且Cookie管理器中已存在
laravel_session、XSRF-TOKEN两个Cookie - 直接发送其他需要鉴权的API接口,即可正常获取响应
内容的提问来源于stack exchange,提问作者Ricardo
相关产品推荐
相关产品推荐

