Postman前置脚本实现Token自动刷新:第三次请求授权失败
Postman前置脚本第三次请求返回未授权问题排查与解决
核心问题分析
前两次请求能成功获取到Activation Token,但第三次请求返回未授权,最可能的原因是第三次请求没有正确携带刚获取的授权凭证,或是变量更新的时序问题导致凭证未及时生效。
具体解决方向
动态构建第三次请求,确保携带最新Token
你提前定义了sessionTokenRequest,但此时token变量还未被赋值,所以这个请求对象里并没有包含后续获取到的Activation Token。需要在拿到newAccessToken之后,再动态创建sessionTokenRequest,把Token直接传入请求的header或body中(根据接口要求调整)。直接使用内存变量而非集合变量
虽然你调用了pm.collectionVariables.set更新变量,但Postman的集合变量更新存在异步延迟风险,直接使用newAccessToken这个内存变量传递给第三次请求,能避免时序问题。确认Session Token接口的授权要求
检查接口文档,确认Session Token接口是否需要特殊的授权格式(比如Bearer前缀、特定header字段),或者是否需要结合第一次请求返回的其他参数一起传递。
修改后的示例代码
const newActivationRequest = { method: 'POST', url: newActivationUrl, body: { } }; const activationTokenRequest = { method: 'POST', url: activationTokenUrl, body: { } }; pm.sendRequest(newActivationRequest, (err, responseNewActivation) => { const jsonResponseNewActivation = responseNewActivation.json(); const statusNewActivation = jsonResponseNewActivation.status; if(statusNewActivation === 'SUCCESS'){ pm.sendRequest(activationTokenRequest, (err, responseActivationToken) => { const jsonResponseActivationToken = responseActivationToken.json(); const statusTokenRequest = jsonResponseActivationToken.status; if(statusTokenRequest === 'SUCCESS'){ const newAccessToken = jsonResponseActivationToken.access_token; pm.collectionVariables.set('token', newAccessToken); // 拿到Token后再构建Session请求,确保携带凭证 const sessionTokenRequest = { method: 'POST', url: sessionTokenUrl, headers: { 'Authorization': `Bearer ${newAccessToken}` // 按接口要求调整授权格式 }, body: { // 接口所需请求体内容 } }; pm.sendRequest(sessionTokenRequest, (err, responseSessionToken) => { if (err) { console.error('Session请求出错:', err); return; } const jsonResponseSessionToken = responseSessionToken.json(); const statusSessionToken = jsonResponseSessionToken.status; console.log('8'); if(statusSessionToken === 'SUCCESS'){ const newSessionToken = jsonResponseSessionToken.access_token; pm.collectionVariables.set('token', newSessionToken); } else { console.error('Session请求失败:', jsonResponseSessionToken); } }); } }); } });
内容的提问来源于stack exchange,提问作者Andrey Mokeev
相关产品推荐
相关产品推荐

