|
|
|
@ -1,14 +1,17 @@ |
|
|
|
// 请求队列
|
|
|
|
let requestList = []; |
|
|
|
// 是否正在刷新中
|
|
|
|
let isRefreshToken = false; |
|
|
|
|
|
|
|
|
|
|
|
const request = (options) => { |
|
|
|
const header = options.header||{}; |
|
|
|
const request = (options) => { |
|
|
|
const header = options.header || {}; |
|
|
|
const loginInfo = uni.getStorageSync("loginInfo"); |
|
|
|
if (loginInfo) { |
|
|
|
header.accessToken = loginInfo.accessToken; |
|
|
|
} |
|
|
|
return new Promise(function(resolve, reject) { |
|
|
|
uni.request({ |
|
|
|
url: process.env.BASE_URL + options.url, |
|
|
|
url: process.env.BASE_URL + options.url, |
|
|
|
method: options.method || 'GET', |
|
|
|
header: header, |
|
|
|
data: options.data || {}, |
|
|
|
@ -16,41 +19,41 @@ const request = (options) => { |
|
|
|
if (res.data.code == 200) { |
|
|
|
return resolve(res.data.data) |
|
|
|
} else if (res.data.code == 400) { |
|
|
|
uni.navigateTo({ |
|
|
|
url: '/pages/login/login' |
|
|
|
}); |
|
|
|
navToLogin(); |
|
|
|
} else if (res.data.code == 401) { |
|
|
|
console.log("token失效,尝试重新获取") |
|
|
|
if (!loginInfo) { |
|
|
|
uni.navigateTo({ |
|
|
|
url: '/pages/login/login' |
|
|
|
}); |
|
|
|
if (isRefreshToken) { |
|
|
|
// 正在刷新token,把其他请求存起来
|
|
|
|
return new Promise(resolve => { |
|
|
|
requestList.push(() => { |
|
|
|
resolve(request(options)) |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
isRefreshToken = true; |
|
|
|
// 发送请求, 进行刷新token操作, 获取新的token
|
|
|
|
const data = await request({ |
|
|
|
method: 'PUT', |
|
|
|
url: '/refreshToken', |
|
|
|
header: { |
|
|
|
refreshToken: loginInfo.refreshToken |
|
|
|
} |
|
|
|
const res = await reqRefreshToken(loginInfo).catch((res) => { |
|
|
|
return navToLogin(); |
|
|
|
}).finally(()=>{ |
|
|
|
requestList.forEach(cb => cb()); |
|
|
|
requestList = []; |
|
|
|
isRefreshToken = false; |
|
|
|
}) |
|
|
|
// 换取token失败,跳转至登录界面
|
|
|
|
if(data.code != 200){ |
|
|
|
uni.navigateTo({ |
|
|
|
url: '/pages/login/login' |
|
|
|
}); |
|
|
|
if (res.data.code != 200) { |
|
|
|
return navToLogin(); |
|
|
|
} |
|
|
|
// 保存token
|
|
|
|
uni.setStorageSync("loginInfo", data); |
|
|
|
uni.setStorageSync("loginInfo", res.data.data); |
|
|
|
// 重新发送刚才的请求
|
|
|
|
return request(options) |
|
|
|
|
|
|
|
} else { |
|
|
|
uni.showToast({ |
|
|
|
icon: "none", |
|
|
|
title: res.data.message, |
|
|
|
duration: 1500 |
|
|
|
}) |
|
|
|
return reject(res.data.data) |
|
|
|
return reject(res.data) |
|
|
|
} |
|
|
|
}, |
|
|
|
fail(error) { |
|
|
|
@ -64,4 +67,35 @@ const request = (options) => { |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const reqRefreshToken = (loginInfo) => { |
|
|
|
return new Promise(function(resolve, reject) { |
|
|
|
uni.request({ |
|
|
|
method: 'PUT', |
|
|
|
url: process.env.BASE_URL + '/refreshToken', |
|
|
|
header: { |
|
|
|
refreshToken: loginInfo.refreshToken |
|
|
|
}, |
|
|
|
success: (res) => { |
|
|
|
resolve(res); |
|
|
|
}, |
|
|
|
fail: (res) => { |
|
|
|
reject(res); |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const navToLogin = () => { |
|
|
|
uni.showToast({ |
|
|
|
icon: "none", |
|
|
|
title: "登录过期,请需要重新登录", |
|
|
|
duration: 1500 |
|
|
|
}) |
|
|
|
uni.removeStorageSync("loginInfo"); |
|
|
|
uni.navigateTo({ |
|
|
|
url: '/pages/login/login' |
|
|
|
}); |
|
|
|
} |
|
|
|
export default request; |