APP内打开子项目页面接口返回token失效时自动获取token并重新调取接口

242 阅读1分钟

背景是我们有个独立的子项目。在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);
            }
        }
    );
}