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