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