//获取当前允许环境
const env = wx.getAccountInfoSync().miniProgram.envVersion;
if (!env) {
console.error("获取运行环境失败!")
}
//设置运行环境地址
const api = {
// 开发版
develop: "http://124.221.134.93:8088",
// 体验版
trial: "http://124.221.134.93:8088",
// 正式版
release: "http://124.221.134.93:8088",
}
const baseURL = api[env];
const http = ({
url,
data,
method = 'POST',
}) => {
const cookie = wx.getStorageSync('cookie');
const csrfToken = wx.getStorageSync('csrfToken');
const header = {
"content-type": 'application/json',
'cookie': cookie,
'X-CSRF-Token': csrfToken
}
method = (method || 'POST').toLocaleLowerCase();
return new Promise((resolve, reject) => {
wx.request({
url: baseURL + url,
method,
data,
dataType: "json",
header,
timeout: 7000, //请求超时时间
success: (res) => {
console.log("响应结果", res)
if (res.statusCode >= 200 && res.statusCode < 300) {
resolve(res.data);
} else if (res.statusCode === 401) { //token过期或者token出错了
getNewToken().then(res=>{
//成功获取新的cookie后,再次发起业务请求,并返回结果
resolve(http({method, url, data}))
});
} else {
wx.showToast({
title: res.data.message,
icon: "none",
duration: 2000
})
}
},
fail: (err) => { //请求失败
wx.showModal({
title: '服务器出错',
content: '服务器出错了,请稍后再试!',
showCancel: false,
})
reject(err);
},
complete: (res) => {
// wx.hideLoading()
}
})
});
}
function getNewToken () {
return new Promise((resolve, reject) => {
const {
username,
password
} = wx.getStorageSync('loginInfo')
wx.request({
url: baseURL + '/signin', //在user/login的接口中,后台返回用户的信息并且带有token
method: 'post',
header:{
"content-type": 'application/json'
},
data: {
username,
password,
},
success(res) {
if (res.statusCode == 200) { //这里相当于用户又一次登录,并且得到了一个新的cookie并把它写入了 storage本地缓存中
//设置新的cookie逻辑代码
resolve(res);
}
},
fail(err) {
console.log('请求出错啦' + err)
reject()
}
})
}
})
}
module.exports = http;
微信小程序cookie过期实现用户重新登录并再次发起业务请求
最新推荐文章于 2024-05-07 13:17:50 发布