From 2c41dc4162446120feae6a09ecf1d07118850f88 Mon Sep 17 00:00:00 2001
From: yangyin <1850366751@qq.com>
Date: 星期四, 29 八月 2024 12:00:12 +0800
Subject: [PATCH] fix: 修改登录的token过期问题

---
 utils/api.js |  212 +++++++++++++++++++++++++++++------------------------
 1 files changed, 116 insertions(+), 96 deletions(-)

diff --git a/utils/api.js b/utils/api.js
index 328a712..91dd269 100644
--- a/utils/api.js
+++ b/utils/api.js
@@ -1,10 +1,10 @@
+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'
 let API = (params) => {
-  // console.log(params,2)
   let tokenInfo = wx.getStorageSync(ACCESS_TOKEN_KEY)
-  // console.log(tokenInfo, 3)
   let currentDateTime = new Date().getTime()
   if (!tokenInfo) {
     wx.reLaunch({
@@ -12,14 +12,34 @@
     })
     return
   }
-  //璁剧疆鐧诲綍鏃堕棿涓轰竷澶� 鍒ゆ柇token鏄惁澶辨晥
-  let effectiveTime = 7 * 60 * 60 * 24 * 1000
-  // 鍒ゆ柇褰撳墠鏃堕棿涓巘oken瀛樺叆鐨勬椂闂寸浉姣旇緝锛屽鏋滃ぇ浜庝竷澶╁垯閲嶆柊鐧诲綍
-  if (((currentDateTime - tokenInfo.ExpreTime) > effectiveTime) && tokenInfo.isNeedToken) {
+  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();
+  // 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鏄惁閮藉け鏁�,閮藉け鏁堝垯璺宠浆鐧诲綍
+  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: '',
@@ -32,7 +52,6 @@
     fail: function () {},
     complete: function () {}
   }
-
   let requestParam = Object.assign(defaultParams, params)
   // 鍒ゆ柇鏄惁瑕佹坊鍔爐oken
   if (tokenInfo.isNeedToken == true) {
@@ -45,18 +64,34 @@
     header: requestParam.header,
     success: res => {
       let result = res.data
-      if (result.data != undefined && result.data == 401) {
+      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
+      if (result.Code && result.Code != 0) {
+        if (result.Code == -3) {
+          wx.showModal({
+            title: result.Message,
+            complete: (res) => {
+              if (res.cancel) {
+
+              }
+
+              if (res.confirm) {
+
+              }
+            }
+          })
+
+        } else {
+          wx.showToast({
+            title: result.Message,
+            icon: 'error',
+            duration: 1500
+          })
+          RefreshToken()
+          return
+        }
       }
       requestParam.success(res)
     },
@@ -70,91 +105,76 @@
 
 }
 const RefreshToken = () => {
-  wx.reLaunch({
-    url: '/login/login/index',
-  })
-  return
-
   // 鑾峰彇璐︽埛淇℃伅
-  // let accountInfo = JSON.parse(wx.getStorageSync("AccountInfo"))
-
-  // console.log(accountInfo,60)
+  let accountInfo = wx.getStorageSync("AccountInfo")
   // 鑾峰彇鐧诲綍鐨勭敤鎴蜂俊鎭�
-  // 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
-  // }
+  let data = {
+    LoginName: accountInfo.phone,
+    LoginPwd: accountInfo.password,
+    Software: Constant.Software
+  }
   // 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淇℃伅")
+  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: 'token鑾峰彇澶辫触锛岃閲嶆柊鐧诲綍',
+          icon: "none",
+          duration: 2000
+        })
+        return;
+      }
+      var return_data = result.Data;
+      if (return_data.Status != 0) {
+        wx.showToast({
+          title: 'token鑾峰彇澶辫触锛岃閲嶆柊鐧诲綍',
+          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,
+      })    
+    }
+  })
+}
 
-  //     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) {
 
-  //     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() //鑾峰彇褰撳墠鏃堕棿鎴�
+  token = weappJwt(token)
+  return token
+}
 
-  //     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