From 14ae2f656166b98302682664888d2b882b7e4649 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 16 十月 2025 11:10:58 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/send_coupon' into send_coupon
---
manager/src/libs/axios.js | 116 ++++++++++++++++++++++++++++++++-------------------------
1 files changed, 65 insertions(+), 51 deletions(-)
diff --git a/manager/src/libs/axios.js b/manager/src/libs/axios.js
index be90be5..f1f2832 100644
--- a/manager/src/libs/axios.js
+++ b/manager/src/libs/axios.js
@@ -21,15 +21,19 @@
const service = axios.create({
timeout: 8000,
- baseURL: managerUrl,
- headers: {
- accessToken: getStore("accessToken")
- },
+ baseURL: managerUrl
+ // 绉婚櫎鍥哄畾鐨刟ccessToken璁剧疆锛屾敼鍦ㄨ姹傛嫤鎴櫒涓姩鎬佽缃�
});
var isRefreshToken = 0;
const refreshToken = getTokenDebounce();
service.interceptors.request.use(
config => {
+ // 鍔ㄦ�佽缃產ccessToken
+ const accessToken = getStore("accessToken");
+ if (accessToken) {
+ config.headers.accessToken = accessToken;
+ }
+
if (config.method == "get") {
config.params = {
_t: Date.parse(new Date()) / 1000,
@@ -101,24 +105,34 @@
} else if (error.response.status === 404) {
// 閬垮厤鍒锋柊token鎶ラ敊
} else if (error.response.status === 403 || error.response.data.code === 20004) {
- isRefreshToken++;
- if (isRefreshToken === 1) {
+ // 鏀硅繘鐨則oken鍒锋柊鏈哄埗锛岄伩鍏嶇珵鎬佹潯浠�
+ if (isRefreshToken === 0) {
+ isRefreshToken = 1;
const getTokenRes = await refreshToken();
if (getTokenRes === "success") {
- // 鍒锋柊token
- if (isRefreshToken === 1) {
- error.response.config.headers.accessToken = getStore(
- "accessToken"
- );
- return service(error.response.config);
- } else {
- router.go(0);
- }
+ // 鍒锋柊token鎴愬姛锛岄噸鏂板彂璧疯姹�
+ error.response.config.headers.accessToken = getStore("accessToken");
+ isRefreshToken = 0;
+ return service(error.response.config);
} else {
+ // 鍒锋柊澶辫触锛岃烦杞埌鐧诲綍椤�
+ isRefreshToken = 0;
Cookies.set("userInfoManager", "");
+ setStore("accessToken", "");
+ setStore("refreshToken", "");
router.push("/login");
}
- isRefreshToken = 0;
+ } else {
+ // 濡傛灉宸茬粡鏈夎姹傚湪鍒锋柊token锛岀瓑寰呬竴灏忔鏃堕棿鍚庨噸璇�
+ await new Promise(resolve => setTimeout(resolve, 100));
+ if (isRefreshToken === 0) {
+ // token鍒锋柊瀹屾垚锛岄噸鏂板彂璧疯姹�
+ error.response.config.headers.accessToken = getStore("accessToken");
+ return service(error.response.config);
+ } else {
+ // 瓒呮椂鎴栧叾浠栭敊璇紝璺宠浆鍒扮櫥褰曢〉
+ router.push("/login");
+ }
}
} else {
// 鍏朵粬閿欒澶勭悊
@@ -133,46 +147,46 @@
// 鍘熷鐨刟xios鏆撮湶鍑哄幓鐢ㄥ嵆鍙�
export default service
-// 闃叉姈闂寘鏉ヤ竴娉�
+// 鏀硅繘鐨勯槻鎶栨満鍒�
function getTokenDebounce() {
let lock = false;
let success = false;
+ let resolveCallbacks = []; // 瀛樺偍绛夊緟鐨勫洖璋�
+
return function() {
- if (!lock) {
- lock = true;
- let oldRefreshToken = getStore("refreshToken");
- handleRefreshToken(oldRefreshToken)
- .then(res => {
- if (res.success) {
- let { accessToken, refreshToken } = res.result;
- setStore("accessToken", accessToken);
- setStore("refreshToken", refreshToken);
-
- success = true;
- lock = false;
- } else {
- success = false;
- lock = false;
- router.push("/login");
- }
- })
- .catch(err => {
- success = false;
- lock = false;
- });
- }
return new Promise(resolve => {
- // 涓�鐩寸湅lock,鐩村埌璇锋眰澶辫触鎴栬�呮垚鍔�
- const timer = setInterval(() => {
- if (!lock) {
- clearInterval(timer);
- if (success) {
- resolve("success");
- } else {
- resolve("fail");
- }
- }
- }, 500); // 杞鏃堕棿闂撮殧
+ if (!lock) {
+ lock = true;
+ resolveCallbacks = [resolve]; // 鍒濆鍖栧洖璋冩暟缁�
+
+ let oldRefreshToken = getStore("refreshToken");
+ handleRefreshToken(oldRefreshToken)
+ .then(res => {
+ if (res.success) {
+ let { accessToken, refreshToken } = res.result;
+ setStore("accessToken", accessToken);
+ setStore("refreshToken", refreshToken);
+ success = true;
+ } else {
+ success = false;
+ router.push("/login");
+ }
+ })
+ .catch(err => {
+ console.error('Token鍒锋柊澶辫触:', err);
+ success = false;
+ })
+ .finally(() => {
+ lock = false;
+ // 鍚屾椂瑙e喅鎵�鏈夌瓑寰呯殑Promise
+ const result = success ? "success" : "fail";
+ resolveCallbacks.forEach(callback => callback(result));
+ resolveCallbacks = [];
+ });
+ } else {
+ // 濡傛灉姝e湪鍒锋柊锛屽皢鍥炶皟鍔犲叆绛夊緟闃熷垪
+ resolveCallbacks.push(resolve);
+ }
});
};
}
--
Gitblit v1.8.0