token 갱신방식을 delay 방식에서 queue 방식으로 변경

This commit is contained in:
yonghyon
2024-07-25 17:44:00 +09:00
parent f128fda539
commit 0261cb84cc
2 changed files with 38 additions and 39 deletions

View File

@@ -1,10 +1,7 @@
import { URLS } from '../api/apiConfig';
import {
setTokenRefreshing,
TAxios,
} from '../api/TAxios';
import { types } from './actionTypes';
import { changeLocalSettings } from './commonActions';
import { URLS } from "../api/apiConfig";
import { runDelayedAction, setTokenRefreshing, TAxios } from "../api/TAxios";
import { types } from "./actionTypes";
import { changeLocalSettings } from "./commonActions";
// IF-LGSP-000 인증코드 요청
export const getAuthenticationCode = () => (dispatch, getState) => {
@@ -16,6 +13,7 @@ export const getAuthenticationCode = () => (dispatch, getState) => {
dispatch(changeLocalSettings({ accessToken, refreshToken }));
setTokenRefreshing(false);
runDelayedAction(dispatch, getState);
};
const onFail = (error) => {
@@ -133,6 +131,7 @@ export const getReAuthenticationCode = () => (dispatch, getState) => {
const accessToken = response.data.data.accessToken;
dispatch(changeLocalSettings({ accessToken }));
setTokenRefreshing(false);
runDelayedAction(dispatch, getState);
};
const onFail = (error) => {

View File

@@ -20,14 +20,29 @@ import { getUrl, URLS } from "./apiConfig";
import { pushPanel } from "../actions/panelActions";
import * as Config from "../utils/Config";
let retryCount = 0;
let tokenRefreshing = false;
const axiosQueue = [];
export const setTokenRefreshing = (value) => {
console.log("TAxios setTokenRefreshing ", value);
tokenRefreshing = value;
};
export const runDelayedAction = (dispatch, getState) => {
console.log("runDelayedAction axiosQueue size", axiosQueue.length);
while (axiosQueue.length > 0) {
const requestConfig = axiosQueue.pop(); // queue에서 요청을 하나씩 pop
TAxios(
dispatch,
getState,
requestConfig.type,
requestConfig.baseUrl,
requestConfig.urlParams,
requestConfig.params,
requestConfig.onSuccess,
requestConfig.onFail
);
}
};
export const TAxios = (
dispatch,
getState,
@@ -39,28 +54,11 @@ export const TAxios = (
onFail,
noTokenRefresh = false
) => {
const checkAccessToken = () => {
return new Promise((resolve) => {
const accessToken = getState().localSettings.accessToken;
if (noTokenRefresh || (!tokenRefreshing && accessToken)) {
resolve(accessToken);
retryCount = 0;
} else {
if (!accessToken && !tokenRefreshing) {
dispatch(getAuthenticationCode());
}
retryCount++;
if (retryCount > 5) {
return;
}
HelperMethods.wait(100).then(() => {
resolve(checkAccessToken());
});
}
});
const pushQueue = () => {
if (!noTokenRefresh) {
axiosQueue.push({ type, baseUrl, urlParams, params, onSuccess, onFail });
}
};
const executeRequest = (accessToken) => {
const httpHeader = getState().common.httpHeader;
const { mbr_no, deviceId } = getState().common.appStatus;
@@ -138,9 +136,7 @@ export const TAxios = (
if (!tokenRefreshing) {
dispatch(getReAuthenticationCode());
}
checkAccessToken().then((token) => {
executeRequest(token);
});
pushQueue();
return;
}
@@ -152,9 +148,7 @@ export const TAxios = (
if (!tokenRefreshing) {
dispatch(getAuthenticationCode());
}
checkAccessToken().then((token) => {
executeRequest(token);
});
pushQueue();
}
return;
}
@@ -202,7 +196,13 @@ export const TAxios = (
}
};
checkAccessToken().then((token) => {
executeRequest(token);
});
const accessToken = getState().localSettings.accessToken;
if (noTokenRefresh || (!tokenRefreshing && accessToken)) {
executeRequest(accessToken);
} else {
if (!accessToken && !tokenRefreshing) {
dispatch(getAuthenticationCode());
}
pushQueue();
}
};