axios攔截器加autho驗證,接口失效后重新請求的寫法


//request攔截
service.interceptors.request.use(
  request => {
    let { current } = router.history;
    if (
      store.getters["userStore/getToken"] &&
      current.name !== "Login" &&
      request.url != "/login/token/refresh"
    ) {
      //非登陸界面並且不是調用刷新接口並且本地要有token才可以加autho驗證
      request.headers.Authorization = `Bearer ${
        store.getters["userStore/getToken"]
      }`;
    }
    return request;
  },
  error => {
    console.error(error);
    return error;
  }
);

//response攔截
service.interceptors.response.use(
  response => {
    return response;
  },
  async error => {
    try {
      if (error && error.response) {
        // debugger;
        switch (error.response.status) {
          case 401:
            // 返回 401 清除token信息並跳轉到登錄頁面也可以用這個邏輯
            let refreshToken = store.getters["userStore/getParamRefreshToken"];
            let { data } = await post("login/token/refresh", {
              refreshToken
            });
            if (data.code === 200) {
              //刷新token成功后,獲取新的token,覆蓋舊的token,然后返回到報錯的頁面刷新掉
              store.commit("userStore/setParamToken", data.result.access_token);
              //就是重新調用接口獲取數據
              var backoff = new Promise(resolve => {
                resolve();
              });
              return backoff.then(r => {
                return service(error.config);
              });
              // window.location.reload();
            } else {
              //refreshtoken失效的話,就直接到登陸頁面
              router.push("/login");
            }
            return error;
          default:
            console.error(error);
            return error;
        }
      } else {
        console.error(error);
        return error;
      }
    } catch (error) {
      console.error(error);
    }
  }
);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM