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 | 263 +++++++++++++++++++++++---------------------------- 1 files changed, 119 insertions(+), 144 deletions(-) diff --git a/utils/api.js b/utils/api.js index 8104c23..1eb7fd1 100644 --- a/utils/api.js +++ b/utils/api.js @@ -1,152 +1,127 @@ +import weappJwt from './weapp-jwt.js'; +const utils = require('../utils/util.js') let Constant = require('../utils/constant.js') let app = getApp() -let API = (params)=>{ - // console.log(params,2) - let tokenInfo = wx.getStorageSync('AccessToken') - // console.log(tokenInfo,3) - let currentDateTime = new Date().getTime() - if(tokenInfo == undefined || tokenInfo == null){ - wx.reLaunch({ - url: '/login/login/index', - }) - return - } - //璁剧疆鐧诲綍鏃堕棿涓轰竷澶� 鍒ゆ柇token鏄惁澶辨晥 - if(currentDateTime - tokenInfo.ExpreTime > 7 * 60 * 60 * 24 * 1000 && tokenInfo.isNeedToken){ - console.log("缂撳瓨鏃堕棿瓒呰繃涓冨ぉ-----Token澶辨晥") - wx.reLaunch({ - url: '/login/login/index', - }) - return - } - - let defaultParams = { - url: '', - method:"GET", - data:"", - header:{'content-type': 'application/json'}, - success:function(){}, - fail:function(){}, - complete:function(){} - } - - let requestParam = Object.assign(defaultParams, params) - if(tokenInfo.isNeedToken == true){ - requestParam.header.Authorization = 'Bearer ' + tokenInfo.Token - // console.log(tokenInfo.Token,37) - // requestParam.header.Authorization = 'Bearer ' + token - } - // console.log(requestParam,26) - // console.log(requestParam.header,29) - 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(params,API) - return - } - requestParam.success(res) - }, - fail:err=>{ - requestParam.fail(err) - }, - complete:()=>{ - requestParam.complete() - } - }) -} -const RefreshToken = (params,apiCb)=>{ - let that = this; - if(wx.getStorageSync("AccountInfo") == null || wx.getStorageSync("AccountInfo") == undefined || wx.getStorageSync("AccountInfo") ==""){ - wx.reLaunch({ - url: '/login/login/index', - }) - return - } - // 鑾峰彇璐︽埛淇℃伅 - let accountInfo = JSON.parse(wx.getStorageSync("AccountInfo")) - - // 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, +let ACCESS_TOKEN_KEY = 'AccessToken' +const expiredDateOffset = -1000 * 60 * 5; +let API = (params) => { + let defaultParams = { + url: '', + method: "GET", + data: "", header: { - 'content-type': 'application/json' + '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.Token - let isNeedToken = false //鏄惁闇�瑕乀oken 褰揟oken澶辨晥鐨勬椂鍊� 鍒ゆ柇鏄惁璺宠浆鐧诲綍 - if(Token){ - isNeedToken = true - } - let ExpreTime = new Date().getTime() //鑾峰彇褰撳墠鏃堕棿鎴� - - wx.setStorageSync('AccessToken', { - Token:Token, - ExpreTime:ExpreTime, - isNeedToken:isNeedToken + 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', }) - wx.setStorageSync( "AccountInfo",JSON.stringify(data)) - // 鑾峰彇鏂扮殑token鍚庨噸鏂拌皟鐢ㄦ帴鍙� - apiCb(params) + return + } else { + requestParam.header.Authorization = `Bearer ${refreshAccessToken}`; + } } - }); + } + +} + + +wx.request({ + url: requestParam.url, + method: requestParam.method, + data: requestParam.data, + header: requestParam.header, + success: res => { +// 鍙兘鍙� access-token锛屼笉鑳借窡 accessTokenKey 涓�鏍� +const accessToken = res.header['access-token']; +// 鍙兘鍙� x-access-token'锛屼笉鑳借窡 refreshAccessTokenKey 涓�鏍� +const refreshAccessToken = res.header['x-access-token']; + +// 鍒ゆ柇鏄惁鏄棤鏁� 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' + }) + return; + } + 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); + }, + complete: () => { + requestParam.complete(); + } +}); + +} +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) { + let jwt_token = defaultClone(token) + return weappJwt(jwt_token) +} +function defaultClone (value){ + return JSON.parse(JSON.stringify(value)) +} + +//灏� JWT 鏃堕棿鎴宠浆鎹㈡垚 Date +function getJWTDate(timestamp) { + return new Date(timestamp * 1000); } export default API \ No newline at end of file -- Gitblit v1.9.3