wangrong
14 小时以前 db685b04e52efd75213ef7540fdc0bed7dccfd9e
cool/service/request.ts
@@ -10,6 +10,33 @@
// Token 是否刷新中
let isRefreshing = false;
let reloginTask: Promise<boolean> | null = null;
function dropToken() {
   const { user } = useStore();
   user.token = "";
   storage.remove("token");
   storage.remove("token_deadtime");
   storage.remove("refreshToken");
   storage.remove("refreshToken_deadtime");
}
function recoverLogin() {
   if (reloginTask) {
      return reloginTask;
   }
   reloginTask = import("../mini-login")
      .then(({ miniAutoLogin }) => {
         dropToken();
         return miniAutoLogin(true);
      })
      .catch(() => false)
      .finally(() => {
         reloginTask = null;
      });
   return reloginTask;
}
export default function request(options: any) {
   const { user } = useStore();
@@ -45,6 +72,23 @@
                  message: string;
                  data: any;
               };
               const invalid = res.statusCode === 401 || message === "登录失效~";
               const skipRelogin = /miniAuto|refreshToken/.test(options.url || "");
               if (invalid && !skipRelogin && !options.__retried) {
                  options.__retried = true;
                  recoverLogin()
                     .then((ok) => {
                        if (!ok) {
                           reject({ message: message || "登录失效~", code: code || 1001 });
                           return;
                        }
                        Authorization = useStore().user.token || "";
                        next();
                     })
                     .catch((err) => reject(err));
                  return;
               }
               // 无权限
               if (res.statusCode === 401) {
@@ -95,9 +139,18 @@
            // 判断 token 是否过期
            if (storage.isExpired("token")) {
               // 判断 refreshToken 是否过期
               if (storage.isExpired("refreshToken")) {
                  // 退出登录
                  return user.logout();
               if (!storage.get("refreshToken") || storage.isExpired("refreshToken")) {
                  recoverLogin()
                     .then((ok) => {
                        if (!ok) {
                           reject({ message: "登录失效~", code: 1001 });
                           return;
                        }
                        Authorization = useStore().user.token || "";
                        next();
                     })
                     .catch((err) => reject(err));
                  return;
               }
               // 是否在刷新中
@@ -109,9 +162,19 @@
                        requests = [];
                        isRefreshing = false;
                     })
                     .catch((err) => {
                        user.logout();
                        reject(err);
                     .catch(() => {
                        isRefreshing = false;
                        requests = [];
                        recoverLogin()
                           .then((ok) => {
                              if (!ok) {
                                 reject({ message: "登录失效~", code: 1001 });
                                 return;
                              }
                              Authorization = useStore().user.token || "";
                              next();
                           })
                           .catch((err) => reject(err));
                     });
               }