From db685b04e52efd75213ef7540fdc0bed7dccfd9e Mon Sep 17 00:00:00 2001
From: wangrong <wangrong@shsening.com>
Date: 星期一, 26 十月 2026 21:13:37 +0800
Subject: [PATCH] 更新小程序
---
cool/service/request.ts | 75 ++++++++++++++++++++++++++++++++++---
1 files changed, 69 insertions(+), 6 deletions(-)
diff --git a/cool/service/request.ts b/cool/service/request.ts
index 11eae91..a78b730 100644
--- a/cool/service/request.ts
+++ b/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));
});
}
--
Gitblit v1.9.1