From f9ac580238527a3e9f5a13b2c7ea49d02a7a1a83 Mon Sep 17 00:00:00 2001
From: yangyin <1850366751@qq.com>
Date: 星期四, 21 十一月 2024 20:44:59 +0800
Subject: [PATCH] 提交代码

---
 utils/api.js |  217 ++++++++++++++++++++----------------------------------
 1 files changed, 81 insertions(+), 136 deletions(-)

diff --git a/utils/api.js b/utils/api.js
index 9b11ed0..1eb7fd1 100644
--- a/utils/api.js
+++ b/utils/api.js
@@ -3,168 +3,113 @@
 let Constant = require('../utils/constant.js')
 let app = getApp()
 let ACCESS_TOKEN_KEY = 'AccessToken'
+const expiredDateOffset = -1000 * 60 * 5;
 let API = (params) => {
-  let tokenInfo = wx.getStorageSync(ACCESS_TOKEN_KEY)
-  let currentDateTime = new Date().getTime()
-  if (!tokenInfo) {
-    wx.reLaunch({
-      url: '/login/login/index',
-    })
-    return
-  }
-  const token = tokenInfo.Token;
-  const refresh_token = tokenInfo.RefreshToken
-  if (!refresh_token) {
-    wx.reLaunch({
-      url: '/login/login/index',
-    })
-    return
-  }
-  //瑙f瀽token
-  const jwt_token = decryptJWT(token);
-  // 鑾峰彇token澶辨晥鏃堕棿
-  const exp_token = getJWTDate(jwt_token.exp).getTime()- 2 * 60 * 1000
-  // token澶辨晥鐘舵��
-  const isExpireByToken = currentDateTime >= exp_token
-  //瑙f瀽refreshtoken
-  const jwt_refresh_token = decryptJWT(refresh_token);
-  // 鑾峰彇refreshToken澶辨晥鏃堕棿
-  const exp_refresh_token = getJWTDate(jwt_refresh_token.exp).getTime();
-  // refreshToken澶辨晥鐘舵��
-  const isExpireByRefreshToken = currentDateTime >= exp_refresh_token
-  // 鍒ゆ柇 token鍜宺efreshToken鏄惁閮藉け鏁�,閮藉け鏁堝垯閲嶆柊鍒锋柊椤甸潰Token
-  if ((isExpireByToken && isExpireByRefreshToken) && tokenInfo.isNeedToken) {
-    RefreshToken() 
-  }
-  // 鍒ゆ柇 token 澶辨晥浣唕efreshToken娌″け鏁�
-  if ((!isExpireByToken && isExpireByRefreshToken) && tokenInfo.isNeedToken) {
-    tokenInfo.Token = refresh_token
-    wx.setStorageSync(ACCESS_TOKEN_KEY, tokenInfo)
-  }
   let defaultParams = {
     url: '',
     method: "GET",
     data: "",
     header: {
-      'content-type': 'application/json'
+        'content-type': 'application/json'
     },
     success: function () {},
     fail: function () {},
     complete: function () {}
+};
+let requestParam = Object.assign(defaultParams, params);
+let tokenInfo = wx.getStorageSync(ACCESS_TOKEN_KEY)
+let accessToken= tokenInfo.Token
+if (accessToken) {
+  // 灏� token 娣诲姞鍒拌姹傛姤鏂囧ご涓�
+  requestParam.header.Authorization = `Bearer ${accessToken}`;
+  // 鍒ゆ柇 accessToken 鏄惁杩囨湡
+  const isExpired = checkTokenExpired(accessToken, expiredDateOffset);
+  // token 宸茬粡杩囨湡
+  if (isExpired) {
+    // 鑾峰彇鍒锋柊 token
+    const tokenInfo2 = wx.getStorageSync(ACCESS_TOKEN_KEY);
+     let refreshAccessToken=tokenInfo2.RefreshToken
+    if (refreshAccessToken) {
+      const refreshIsExpired = checkTokenExpired(refreshAccessToken);
+      if (refreshIsExpired) {
+        wx.reLaunch({
+        url: '/login/login/index',
+      })
+      return
+      } else {
+        requestParam.header.Authorization = `Bearer ${refreshAccessToken}`;
+      }
+    }
   }
-  let requestParam = Object.assign(defaultParams, params)
-  // 鍒ゆ柇鏄惁瑕佹坊鍔爐oken
-  if (tokenInfo.isNeedToken == true) {
-    requestParam.header.Authorization = 'Bearer ' + tokenInfo.Token
-  }
-  wx.request({
+
+}
+
+
+wx.request({
     url: requestParam.url,
     method: requestParam.method,
     data: requestParam.data,
     header: requestParam.header,
     success: res => {
-      let result = res.data
-      if (result.Data != undefined && result.Data == 401) {
-        RefreshToken()
-        return
-      }
-      if (result.Code && result.Code != 0) {
-        if (result.Code == -3) {
-          wx.showModal({
-            title: result.Message,
-            complete: (res) => {
-              if (res.cancel) {
+// 鍙兘鍙� access-token锛屼笉鑳借窡 accessTokenKey 涓�鏍�
+const accessToken = res.header['access-token'];
+// 鍙兘鍙� x-access-token'锛屼笉鑳借窡 refreshAccessTokenKey 涓�鏍�
+const refreshAccessToken = res.header['x-access-token'];
 
-              }
-
-              if (res.confirm) {
-
-              }
-            }
+// 鍒ゆ柇鏄惁鏄棤鏁� token
+if (accessToken === 'invalid_token') {
+  wx.reLaunch({
+    url: '/login/login/index'
+  })
+  return
+}
+// 鍒ゆ柇鏄惁瀛樺湪鍒锋柊 token锛屽鏋滃瓨鍦ㄥ垯瀛樺偍鍦ㄦ湰鍦�
+else if (refreshAccessToken && accessToken && accessToken !== 'invalid_token') {
+  wx.setStorageSync(ACCESS_TOKEN_KEY, {
+    Token: accessToken,
+    RefreshToken: refreshAccessToken,
+});
+}
+        let result = res.data;
+        if (result.Data!= undefined && result.Data == 401) {
+          // 鍒锋柊鎴愬姛鍚庨噸鏂板彂璧疯姹�
+          wx.reLaunch({
+            url: '/login/login/index'
           })
-
-        } else {
-          wx.showToast({
-            title: result.Message,
-            icon: 'error',
-            duration: 1500
-          })
-          RefreshToken()
-          return
+            return;
         }
-      }
-      requestParam.success(res)
+        if (result.Code && result.Code!= 0) {
+            if (result.Code == -1&& result.Error === 'A099') {
+              wx.reLaunch({
+                url: '/login/login/index'
+              })
+                return;
+
+            } 
+        }
+        requestParam.success(res);
     },
     fail: err => {
-      requestParam.fail(err)
+        requestParam.fail(err);
     },
     complete: () => {
-      requestParam.complete()
+        requestParam.complete();
     }
-  })
+});
 
 }
-const RefreshToken = () => {
-  // 鑾峰彇璐︽埛淇℃伅
-  let accountInfo = wx.getStorageSync("LoginUserInfo")
-  // 鑾峰彇鐧诲綍鐨勭敤鎴蜂俊鎭�
-  let data = {
-    LoginName: accountInfo.phone,
-    LoginPwd: accountInfo.password,
-    Software: Constant.Software
-  }
-  // console.log(JSON.stringify(data),110)
-  wx.request({
-    url: Constant.BASE_AUTH_URL + "Auth/User/Login/LoginSoftwareStandardBySystemAccount@V1.0",
-    method: 'POST',
-    data: data,
-    header: {
-      'content-type': 'application/json'
-    },
-    fail: function (err) { //璇锋眰澶辫触
-      wx.showModal({
-        content: '缃戠粶淇″彿涓嶅ソ',
-        showCancel: false,
-        confirmColor: "#39b5de"
-      });
-    },
-    success: function (res) {
-      // console.log(res, "鏂扮殑token淇℃伅")
-      var result = res.data;
-      // console.log(result);
-      if (result.Code != 0) {
-        wx.showToast({
-          title: result.Message,
-          icon: "none",
-          duration: 2000
-        })
-        return;
-      }
-      var return_data = result.Data;
-      if (return_data.Status != 0) {
-        wx.showToast({
-          title: result.Message,
-          icon: "none",
-          duration: 2000
-        })
-        return;
-      }
-      let Token = return_data.AccessToken
-      let RefreshToken = return_data.RefreshToken
-      let isNeedToken = false //鏄惁闇�瑕乀oken 褰揟oken澶辨晥鐨勬椂鍊� 鍒ゆ柇鏄惁璺宠浆鐧诲綍
-      if (Token) {
-        isNeedToken = true
-      }
-      let ExpreTime = new Date().getTime() //鑾峰彇褰撳墠鏃堕棿鎴�
-      wx.setStorageSync('AccessToken', {
-        Token: Token,
-        RefreshToken: RefreshToken,
-        ExpreTime: ExpreTime,
-        isNeedToken: isNeedToken,
-      })    
-    }
-  })
-}
+const checkTokenExpired = (token, expiredOffset = 0) => {
+	const jwt = decryptJWT(token);
+	const date = getJWTDate(jwt.exp) 
+	const exp = date.getTime() + expiredOffset;
+	const currentTime = new Date().getTime();
+	const isExpired = currentTime > exp;
+	return isExpired;
+};
+/**
+ * 鍒锋柊浠ょ墝鐨勫嚱鏁�
+ * @returns {Promise} - 鍒锋柊浠ょ墝鐨勫紓姝ユ搷浣滅殑 Promise 瀵硅薄
+ */
 
 //瑙e瘑 JWT token 鐨勪俊鎭�
 function decryptJWT(token) {

--
Gitblit v1.9.3