fix: 登出相关逻辑在并发(非await)情况下重复执行的问题
This commit is contained in:
parent
c5fcf50c76
commit
0a27114ea3
@ -10,6 +10,7 @@
|
|||||||
- 登录页面 关闭租户后下拉框没有正常隐藏
|
- 登录页面 关闭租户后下拉框没有正常隐藏
|
||||||
- 字典管理 关闭租户不应显示`同步租户字典`按钮
|
- 字典管理 关闭租户不应显示`同步租户字典`按钮
|
||||||
- 登录日志 漏掉了登录日志日期查询
|
- 登录日志 漏掉了登录日志日期查询
|
||||||
|
- 登出相关逻辑在并发(非await)情况下重复执行的问题
|
||||||
|
|
||||||
**OTHERS**
|
**OTHERS**
|
||||||
|
|
||||||
|
@ -34,8 +34,11 @@ const { apiURL, clientId, enableEncrypt } = useAppConfig(
|
|||||||
import.meta.env.PROD,
|
import.meta.env.PROD,
|
||||||
);
|
);
|
||||||
|
|
||||||
/** 控制是否弹窗 防止登录超时请求多个api会弹窗多次 */
|
/**
|
||||||
let showTimeoutToast = true;
|
* 是否已经处在登出过程中了 一个标志位
|
||||||
|
* 主要是防止一个页面会请求多个api 都401 会导致登出执行多次
|
||||||
|
*/
|
||||||
|
let isLogoutProcessing = false;
|
||||||
|
|
||||||
function createRequestClient(baseURL: string) {
|
function createRequestClient(baseURL: string) {
|
||||||
const client = new RequestClient({
|
const client = new RequestClient({
|
||||||
@ -234,18 +237,16 @@ function createRequestClient(baseURL: string) {
|
|||||||
let timeoutMsg = '';
|
let timeoutMsg = '';
|
||||||
switch (code) {
|
switch (code) {
|
||||||
case 401: {
|
case 401: {
|
||||||
|
// 已经在登出过程中 不再执行
|
||||||
|
if (isLogoutProcessing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
isLogoutProcessing = true;
|
||||||
const _msg = '登录超时, 请重新登录';
|
const _msg = '登录超时, 请重新登录';
|
||||||
const userStore = useAuthStore();
|
const userStore = useAuthStore();
|
||||||
userStore.logout().then(() => {
|
userStore.logout().finally(() => {
|
||||||
/** 只弹窗一次 */
|
message.error(_msg);
|
||||||
if (showTimeoutToast) {
|
isLogoutProcessing = false;
|
||||||
showTimeoutToast = false;
|
|
||||||
message.error(_msg);
|
|
||||||
/** 定时器 3s后再开启弹窗 */
|
|
||||||
setTimeout(() => {
|
|
||||||
showTimeoutToast = true;
|
|
||||||
}, 3000);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
// 不再执行下面逻辑
|
// 不再执行下面逻辑
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user