如何为Postman或Insomnia配置SANCTUM_STATEFUL_DOMAINS环境变量
解决思路
方案1:调整Sanctum的域名匹配规则
- 打开
config/sanctum.php,找到stateful配置项,默认逻辑是判断请求域名是否完全匹配SANCTUM_STATEFUL_DOMAINS列表里的域名:端口格式,你可以修改匹配逻辑,本地开发阶段忽略端口校验,参考配置:
// 原默认配置 'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( '%s%s', 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : '' ))), // 修改为本地开发忽略端口的配置 'stateful' => env('APP_ENV') === 'local' ? [parse_url(env('APP_URL'), PHP_URL_HOST), 'localhost', '127.0.0.1'] : explode(',', env('SANCTUM_STATEFUL_DOMAINS')),
- 本地环境
.env文件中只需配置SANCTUM_STATEFUL_DOMAINS=localhost,127.0.0.1即可,所有本地端口的请求都会被识别为合法的stateful请求。
方案2:手动固定测试工具的请求源信息
- Postman/Insomnia不会强制使用随机端口,你可以在请求头中手动添加
Origin字段,值为你已经配置在SANCTUM_STATEFUL_DOMAINS里的标准地址,比如Origin: http://localhost:3000,覆盖工具自动生成的带随机端口的Origin头即可,不需要修改后端配置。 - 测试CSRF验证流程时,先发送GET请求到
/sanctum/csrf-cookie接口获取CSRF Cookie,后续请求会自动携带该Cookie和你配置的Origin头,即可正常通过身份校验。
方案3:测试阶段临时使用Token校验
- 如果你只需调试接口功能、不需要验证CSRF流程,可以给测试账号生成一个Sanctum Token,在请求头中添加
Authorization: Bearer <生成的token>,Sanctum会优先走Token校验逻辑,自动跳过Stateful域名和CSRF校验。
注意:方案1、方案3仅允许在本地开发环境使用,生产环境必须严格配置
SANCTUM_STATEFUL_DOMAINS的完整域名端口,禁止忽略端口校验,避免产生安全漏洞。
内容的提问来源于stack exchange,提问作者unnoq
相关产品推荐
相关产品推荐

