小程序中实现超过一定时间自动刷新token
//判断token是否过期
async function WeChatMiniRefreshToken() {
let accessExpiresIn = wx.getStorageSync('tokenData').accessExpiresIn; //refreshtoken过期时间
let refreshToken = wx.getStorageSync('tokenData').refreshToken;
let currentTime = new Date();
const accessTime = new Date(accessExpiresIn);
if (currentTime.getTime() >= accessTime.getTime()) {
await refreshHttp(refreshToken);
}
}
//token过期了重新请求获取token
async function refreshHttp(refreshToken,globalData) {
let app = getApp();
app = app ? app : globalData;
let header = Object.assign({
'content-type': 'application/json'
}, {
'apiVersion': '1.0'
}, {
'platform': 'WeChatMiniProgram'
}, {
'platformVersion': '1.0'
}, {
'Authorization': "Bearer " + app.globalData.accessToken
});
try {
const res = await request({
url: app.globalData.host + '/api/Login/WeChatMiniProgram/RefreshToken?refreshToken=' + refreshToken,
method: 'GET',
header: header
});
if (res) {
let datas = res.data
const curTime = new Date();
const accessExpiredTime = new Date(curTime.setSeconds(curTime.getSeconds() + datas.expiresIn));
let tokenData = wx.getStorageSync('tokenData');
tokenData.accessToken = datas.accessToken;
app.globalData.accessToken = datas.accessToken;
tokenData.accessExpiresIn = accessExpiredTime;
wx.setStorageSync('tokenData', tokenData);
}
} catch (e) {
console.log(e)
}
}
//promise方法
function request(options) {
return new Promise((resolve, reject) => {
options.success = res => {
resolve(res);
};
options.fail = err => {
reject(err)
};
wx.request(options);
})
}
export default {
WeChatMiniRefreshToken,
refreshHttp
}