token刷新bug修复
This commit is contained in:
@@ -36,7 +36,6 @@ const encryptPathPrefixes = [
|
||||
'/app/notice/',
|
||||
'/app/idCardLogin',
|
||||
'/app/phoneLogin',
|
||||
'/refreshToken',
|
||||
];
|
||||
|
||||
const addRefreshSubscriber = (callback) => {
|
||||
@@ -48,16 +47,11 @@ const notifyRefreshSubscribers = (token) => {
|
||||
refreshSubscribers = [];
|
||||
};
|
||||
|
||||
const resetRefreshState = () => {
|
||||
isRefreshing = false;
|
||||
refreshSubscribers = [];
|
||||
};
|
||||
|
||||
const noEncryptSet = new Set([
|
||||
'DELETE:/app/job/applyJobCencal',
|
||||
]);
|
||||
|
||||
const isEncryptNeeded = (method, url) => {
|
||||
export const isEncryptNeeded = (method, url) => {
|
||||
const pureUrl = url.split('?')[0];
|
||||
const key = `${method.toUpperCase()}:${pureUrl}`;
|
||||
if (noEncryptSet.has(key)) return false;
|
||||
@@ -76,7 +70,7 @@ const isEncryptNeeded = (method, url) => {
|
||||
return false;
|
||||
};
|
||||
|
||||
const encryptRequestData = (data) => {
|
||||
export const encryptRequestData = (data) => {
|
||||
const jsonData = JSON.stringify(data);
|
||||
// const jsonData = JSON.stringify({a: '1'});
|
||||
console.log('[请求] 加密前:', jsonData)
|
||||
@@ -87,7 +81,7 @@ const encryptRequestData = (data) => {
|
||||
};
|
||||
};
|
||||
|
||||
const handleResponseData = (resData) => {
|
||||
export const handleResponseData = (resData) => {
|
||||
try {
|
||||
if (resData?.encrypted) {
|
||||
const decrypted = sm4Decrypt(config.sm4Config.key, resData.encryptedData);
|
||||
@@ -179,18 +173,13 @@ export function createRequest(url, data = {}, method = 'GET', loading = false, h
|
||||
mask: true
|
||||
})
|
||||
}
|
||||
let Authorization = ''
|
||||
if (useUserStore().token) {
|
||||
Authorization = `Bearer ${useUserStore().token}`
|
||||
}
|
||||
|
||||
const header = headers || {};
|
||||
if(needHeader){
|
||||
header["Authorization"] = Authorization;
|
||||
}
|
||||
const requestData = isEncryptNeeded(method, url) ? encryptRequestData(data) : data;
|
||||
|
||||
const doRequest = () => {
|
||||
if (needHeader) {
|
||||
header["Authorization"] = useUserStore().token ? `Bearer ${useUserStore().token}` : '';
|
||||
}
|
||||
const requestData = isEncryptNeeded(method, url) ? encryptRequestData(data) : data;
|
||||
return new Promise((resolve, reject) => {
|
||||
uni.request({
|
||||
url: config.baseUrl + url,
|
||||
@@ -199,13 +188,10 @@ export function createRequest(url, data = {}, method = 'GET', loading = false, h
|
||||
header,
|
||||
success: resData => {
|
||||
const responseData = handleResponseData(resData.data)
|
||||
console.log('[请求] 接口地址:', config.baseUrl + url)
|
||||
console.log('[请求] 解密后数据:', JSON.stringify(responseData))
|
||||
// console.log('[请求] 接口地址:', config.baseUrl + url)
|
||||
// console.log('[请求] 解密后数据:', JSON.stringify(responseData))
|
||||
// 响应拦截
|
||||
if (resData.statusCode === 200) {
|
||||
// const responseData = handleResponseData(resData.data)
|
||||
// console.log('[请求] 接口地址:', config.baseUrl + url)
|
||||
// console.log('[请求] 解密后数据:', JSON.stringify(responseData))
|
||||
const {
|
||||
code,
|
||||
msg
|
||||
@@ -235,7 +221,7 @@ export function createRequest(url, data = {}, method = 'GET', loading = false, h
|
||||
reject(err)
|
||||
},
|
||||
complete: () => {
|
||||
if (loading) {
|
||||
if (loading && !isRefreshing) {
|
||||
uni.hideLoading();
|
||||
}
|
||||
}
|
||||
@@ -247,33 +233,42 @@ export function createRequest(url, data = {}, method = 'GET', loading = false, h
|
||||
}
|
||||
|
||||
const handleTokenExpired = (resolve, reject, retryRequest, loading) => {
|
||||
if (isRefreshing) {
|
||||
addRefreshSubscriber((token) => {
|
||||
if (token) {
|
||||
retryRequest().then(resolve).catch(reject)
|
||||
} else {
|
||||
reject(new Error('刷新token失败'))
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
isRefreshing = true
|
||||
|
||||
useUserStore().refreshAccessToken().then((newToken) => {
|
||||
notifyRefreshSubscribers(newToken)
|
||||
retryRequest().then(resolve).catch(reject)
|
||||
}).catch((error) => {
|
||||
resetRefreshState()
|
||||
uni.showToast({
|
||||
title: '登录过期,请重新登录',
|
||||
icon: 'none'
|
||||
})
|
||||
reject(error)
|
||||
}).finally(() => {
|
||||
if (loading) {
|
||||
uni.hideLoading()
|
||||
return new Promise((innerResolve, innerReject) => {
|
||||
if (isRefreshing) {
|
||||
addRefreshSubscriber((token) => {
|
||||
if (token) {
|
||||
retryRequest().then(resolve).catch(reject).finally(innerResolve)
|
||||
} else {
|
||||
const err = new Error('刷新token失败')
|
||||
reject(err)
|
||||
innerReject(err)
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
isRefreshing = true
|
||||
|
||||
useUserStore().refreshAccessToken().then((newToken) => {
|
||||
notifyRefreshSubscribers(newToken)
|
||||
retryRequest().then(resolve).catch(reject).finally(() => {
|
||||
isRefreshing = false
|
||||
refreshSubscribers = []
|
||||
if (loading) {
|
||||
uni.hideLoading()
|
||||
}
|
||||
innerResolve()
|
||||
})
|
||||
}).catch((error) => {
|
||||
isRefreshing = false
|
||||
refreshSubscribers = []
|
||||
uni.showToast({
|
||||
title: '登录过期,请重新登录',
|
||||
icon: 'none'
|
||||
})
|
||||
reject(error)
|
||||
innerReject(error)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user