Postman自动刷新Refresh token时返回401错误怎么解决?
Postman自动刷新Token配置报错解决方案
现有配置存在的核心问题
你的配置存在两处逻辑错误,直接触发了报错:
- Tests脚本挂载范围错误:你将提取
access_token的脚本放在了集合全局的Tests标签下,集合内所有请求执行完成后都会运行该脚本。当你发送业务接口getAccount时,脚本会尝试解析getAccount的响应提取token,而getAccount返回401时响应体为空,直接触发JSONError: No data, empty input报错。 - 缺少触发刷新token的逻辑:当前配置没有自动调用获取token接口的流程,环境变量
{{getToken}}为空或已过期,导致getAccount请求鉴权失败返回401。
解决步骤
步骤1:新增独立的token刷新请求
在CollectionGetter集合下新增单独的获取token请求,命名为refreshToken,填写对应token接口的请求方式、地址、参数,单独调试确保请求成功后能返回包含access_token的响应。
步骤2:调整token存储脚本位置
将你之前写在集合Tests里的脚本,移动到refreshToken请求自身的「Tests」标签下,同时添加异常兼容逻辑:
// 仅当请求成功且响应非空时解析token if (pm.response.code === 200 && pm.response.text().trim() !== '') { const jsonData = pm.response.json(); pm.environment.set('getToken', jsonData.access_token); // 存储token过期时间,提前10秒刷新避免临界值问题 pm.environment.set('tokenExpireTime', Date.now() + 3 * 60 * 1000 - 10 * 1000); }
步骤3:配置集合预请求自动刷新逻辑
打开CollectionGetter集合的「Pre-request Script」标签,添加以下脚本,实现每次发送集合下的请求前自动判断token是否需要刷新:
const tokenExpireTime = pm.environment.get('tokenExpireTime') || 0; // token已过期/即将过期时自动调用refreshToken接口刷新 if (Date.now() > tokenExpireTime) { pm.sendRequest('refreshToken', (err, res) => { if (!err && res.code === 200) { const jsonData = res.json(); pm.environment.set('getToken', jsonData.access_token); pm.environment.set('tokenExpireTime', Date.now() + 3 * 60 * 1000 - 10 * 1000); } }); }
步骤4:确认授权配置
保持集合层面的授权配置:Type = Bearer Token,Token值为{{getToken}},所有子业务请求(如getAccount)的授权配置保持「继承父级授权」即可。
配置完成后重新发送getAccount请求即可正常鉴权,无需手动刷新token。
内容的提问来源于stack exchange,提问作者user281070
相关产品推荐
相关产品推荐

