背景是我们有个独立的子项目。在APP内有入口。用户可以直接在APP内访问子项目,是用app的登录状态,调取后台接口拿到token(子项目的登陆态)。
产品提出了一个极致的需求,如果用户在子项目停留超过三十分钟没有发起任何交互,当前token就会失效。token失效,又不能让用户去子项目的登录页面,因为必须要使用APP的登录信息。所以我们必须重新偷偷发起请求获取新的token再重新调用之前的接口。
正在大佬的点拨下完成了以下逻辑,记录一下
再封装请求的地方
let tempParams, tempCallback;
//code='0002'时代表token失效 在之前的接口成功的逻辑中增加token失效的处理
if (json.resultCode === '0002') {
if (tools.isInApp()) {
tempParams = opts;
tempCallback = callback;
syncTokenRequest();
} else {
if (window.location.href.indexOf('pointsMall') === -1) {
router.replace('/login');
} else {
callback(json);
}
}
return;
}
然后syncTokenRequest
function syncTokenRequest() {
let tokenUrl;
if (tools.isProductionEnv()) {
tokenUrl = 'xxxx正式环境获取token的接口';
} else {
tokenUrl =
'xxxxx测试环境获取token接口';
}
let source = store.state.platform;
//这里调用原生方法发送请求获取新token比较方便,没有原生使用当前封装的请求也可以
nativeUtil.sendPostRequest(
tokenUrl,
{source: source},
(err, data) => {
console.log('err', err);
if (data && data.responseBody) {
store.commit('SET_TOKEN', data.responseBody);
tempParams.body.token = data.responseBody;
//重新发起之前的请求
http.request(tempParams, tempCallback);
}
}
);
}