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 |  228 ++++++++++++++++++++++++--------------------------------
 1 files changed, 98 insertions(+), 130 deletions(-)

diff --git a/utils/api.js b/utils/api.js
index c7272b6..1eb7fd1 100644
--- a/utils/api.js
+++ b/utils/api.js
@@ -1,159 +1,127 @@
+import weappJwt from './weapp-jwt.js';
+const utils = require('../utils/util.js')
 let Constant = require('../utils/constant.js')
 let app = getApp()
+let ACCESS_TOKEN_KEY = 'AccessToken'
+const expiredDateOffset = -1000 * 60 * 5;
 let API = (params) => {
-  // console.log(params,2)
-  let tokenInfo = wx.getStorageSync('AccessToken')
-  // console.log(tokenInfo, 3)
-  let currentDateTime = new Date().getTime()
-  if (!tokenInfo) {
-    wx.reLaunch({
-      url: '/login/login/index',
-    })
-    return
-  }
-  //璁剧疆鐧诲綍鏃堕棿涓轰竷澶� 鍒ゆ柇token鏄惁澶辨晥
-  let effectiveTime = 7 * 60 * 60 * 24 * 1000
-  // 鍒ゆ柇褰撳墠鏃堕棿涓巘oken瀛樺叆鐨勬椂闂寸浉姣旇緝锛屽鏋滃ぇ浜庝竷澶╁垯閲嶆柊鐧诲綍
-  if (((currentDateTime - tokenInfo.ExpreTime) > effectiveTime) && tokenInfo.isNeedToken) {
-    wx.reLaunch({
-      url: '/login/login/index',
-    })
-    return
-  }
   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) {
-        wx.showToast({
-          title: result.message,
-          icon: 'error',
-          duration: 1500
-        })
-        RefreshToken()
-        return
-      }
-      requestParam.success(res)
-    },
-    fail: err => {
-      requestParam.fail(err)
-    },
-    complete: () => {
-      requestParam.complete()
-    }
-  })
+// 鍙兘鍙� access-token锛屼笉鑳借窡 accessTokenKey 涓�鏍�
+const accessToken = res.header['access-token'];
+// 鍙兘鍙� x-access-token'锛屼笉鑳借窡 refreshAccessTokenKey 涓�鏍�
+const refreshAccessToken = res.header['x-access-token'];
 
-}
-const RefreshToken = () => {
+// 鍒ゆ柇鏄惁鏄棤鏁� token
+if (accessToken === 'invalid_token') {
   wx.reLaunch({
-    url: '/login/login/index',
+    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'
+          })
+            return;
+        }
+        if (result.Code && result.Code!= 0) {
+            if (result.Code == -1&& result.Error === 'A099') {
+              wx.reLaunch({
+                url: '/login/login/index'
+              })
+                return;
 
-  // 鑾峰彇璐︽埛淇℃伅
-  // let accountInfo = JSON.parse(wx.getStorageSync("AccountInfo"))
+            } 
+        }
+        requestParam.success(res);
+    },
+    fail: err => {
+        requestParam.fail(err);
+    },
+    complete: () => {
+        requestParam.complete();
+    }
+});
 
-  // console.log(accountInfo,60)
-  // 鑾峰彇鐧诲綍鐨勭敤鎴蜂俊鎭�
-  // let userInfo = wx.getStorageSync("LoginUserInfo");
-  // let sysInfo = app.globalData.sysInfo;
-  // console.log('鎵撳嵃userInfo', userInfo)
-  // let data = {
-  //   SoftType: Constant.SoftType,
-  //   SoftTag: Constant.SoftTag,
-  //   LoginName: accountInfo.LoginName,
-  //   LoginPwd: accountInfo.LoginPwd,
-  //   CorpID: Constant.CorpID,
-  //   WxCode: accountInfo.WxCode,
-  //   UJsCode: accountInfo.UJsCode, //鏄惁灏辨槸jsCode鏈夊緟纭
-  //   UAvatarUrl: userInfo == null ? "" : userInfo.avatarUrl,
-  //   UCity: userInfo == null ? "" : userInfo.city,
-  //   UProvince: userInfo == null ? "" : userInfo.province,
-  //   UNickName: userInfo == null ? "" : userInfo.nickName,
-  //   UGender: userInfo == null ? "" : userInfo.gender + "",
-  //   SBrand: sysInfo.brand,
-  //   SModel: sysInfo.model,
-  //   SPlatform: sysInfo.platform,
-  //   SVersion: sysInfo.version
-  // }
-  // console.log(JSON.stringify(data),110)
-  // wx.request({
-  //   url: Constant.BASE_SERVER_URL + "User/UserLogin/FromCorpWechatApplet@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淇℃伅")
+}
+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 瀵硅薄
+ */
 
-  //     var result = res.data;
-  //     // console.log(result);
-  //     if (result.Code != 0) {
-  //       wx.showToast({
-  //         title: 'token鑾峰彇澶辫触锛岃閲嶆柊鐧诲綍',
-  //         icon: "none",
-  //         duration: 2000
-  //       })
-  //       return;
-  //     }
+//瑙e瘑 JWT token 鐨勪俊鎭�
+function decryptJWT(token) {
+  let jwt_token = defaultClone(token)
+  return weappJwt(jwt_token)
+}
+function defaultClone (value){
+  return JSON.parse(JSON.stringify(value))
+}
 
-  //     var return_data = result.Data;
-  //     if (return_data.Status != 0) {
-  //       wx.showToast({
-  //         title: 'token鑾峰彇澶辫触锛岃閲嶆柊鐧诲綍',
-  //         icon: "none",
-  //         duration: 2000
-  //       })
-  //       return;
-  //     }
-  //     let Token = return_data.Token
-  //     let isNeedToken = false //鏄惁闇�瑕乀oken 褰揟oken澶辨晥鐨勬椂鍊� 鍒ゆ柇鏄惁璺宠浆鐧诲綍
-  //     if (Token) {
-  //       isNeedToken = true
-  //     }
-  //     let ExpreTime = new Date().getTime() //鑾峰彇褰撳墠鏃堕棿鎴�
-
-  //     wx.setStorageSync('AccessToken', {
-  //       Token: Token,
-  //       ExpreTime: ExpreTime,
-  //       isNeedToken: isNeedToken
-  //     })
-  //     wx.setStorageSync("AccountInfo", JSON.stringify(data))
-  //     // 鑾峰彇鏂扮殑token鍚庨噸鏂拌皟鐢ㄦ帴鍙�
-  //     apiCb(params)
-  //   }
-  // });
+//灏� JWT 鏃堕棿鎴宠浆鎹㈡垚 Date
+function getJWTDate(timestamp) {
+  return new Date(timestamp * 1000);
 }
 export default API
\ No newline at end of file

--
Gitblit v1.9.3