You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 19:45:07