Laravel Sanctum在Postman中调用受保护路由返回未认证问题排查
Laravel Sanctum Postman认证失败排查要点
以下是可能导致你调用受auth:sanctum保护的路由时提示未认证的原因及排查方向:
Postman请求未正确携带认证凭证
- 确保所有请求(包括Login和受保护路由)都自动携带Cookie:在Postman的设置中开启「Automatically send cookies」,或者检查集合的Cookie配置,确认
laravel_session和XSRF-TOKEN这两个Cookie被正确传递。 - 登录请求和受保护路由必须携带
X-XSRF-TOKEN请求头,值为Cookie中XSRF-TOKEN的解码后内容。可以修改预请求脚本,将解码后的值存入环境变量:
然后在请求头中添加pm.environment.set("xsrf-token", decodeURIComponent(pm.cookies.get("XSRF-TOKEN")));X-XSRF-TOKEN: {{xsrf-token}}。
- 确保所有请求(包括Login和受保护路由)都自动携带Cookie:在Postman的设置中开启「Automatically send cookies」,或者检查集合的Cookie配置,确认
会话与Sanctum域名配置冲突
- 检查
SESSION_DOMAIN配置:当前设置为localhost,但后端运行在localhost:5000、前端在localhost:3000,跨端口场景下可尝试将SESSION_DOMAIN设为空(.env中写SESSION_DOMAIN=),让Laravel自动适配请求域名。 - 确认
SANCTUM_STATEFUL_DOMAINS包含正确的来源:由于Postman请求的Origin可能不是localhost:3000,可在Postman的请求头中手动添加Origin: http://localhost:3000,或者将SANCTUM_STATEFUL_DOMAINS临时改为localhost:5000,localhost:3000覆盖前后端域名。
- 检查
登录请求未成功建立认证会话
检查Login请求的响应头,确认存在Set-Cookie字段,其中包含laravel_session(HttpOnly属性)和XSRF-TOKEN,同时确保Login请求返回了成功的用户认证数据,排除登录逻辑本身的错误。路由与中间件配置问题
- 确认api.php中受保护路由正确使用
auth:sanctum中间件:Route::middleware('auth:sanctum')->group(function () { // 受保护的API路由 }); - 检查
app/Http/Kernel.php的api中间件组是否包含\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,这是SPA状态认证的必需中间件。
- 确认api.php中受保护路由正确使用
内容的提问来源于stack exchange,提问作者henrbu
相关产品推荐
相关产品推荐

