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

View File

@@ -20,14 +20,29 @@ import { getUrl, URLS } from "./apiConfig";
import { pushPanel } from "../actions/panelActions"; import { pushPanel } from "../actions/panelActions";
import * as Config from "../utils/Config"; import * as Config from "../utils/Config";
let retryCount = 0;
let tokenRefreshing = false; let tokenRefreshing = false;
const axiosQueue = [];
export const setTokenRefreshing = (value) => { export const setTokenRefreshing = (value) => {
console.log("TAxios setTokenRefreshing ", value); console.log("TAxios setTokenRefreshing ", value);
tokenRefreshing = 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 = ( export const TAxios = (
dispatch, dispatch,
getState, getState,
@@ -39,28 +54,11 @@ export const TAxios = (
onFail, onFail,
noTokenRefresh = false noTokenRefresh = false
) => { ) => {
const checkAccessToken = () => { const pushQueue = () => {
return new Promise((resolve) => { if (!noTokenRefresh) {
const accessToken = getState().localSettings.accessToken; axiosQueue.push({ type, baseUrl, urlParams, params, onSuccess, onFail });
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 executeRequest = (accessToken) => { const executeRequest = (accessToken) => {
const httpHeader = getState().common.httpHeader; const httpHeader = getState().common.httpHeader;
const { mbr_no, deviceId } = getState().common.appStatus; const { mbr_no, deviceId } = getState().common.appStatus;
@@ -138,9 +136,7 @@ export const TAxios = (
if (!tokenRefreshing) { if (!tokenRefreshing) {
dispatch(getReAuthenticationCode()); dispatch(getReAuthenticationCode());
} }
checkAccessToken().then((token) => { pushQueue();
executeRequest(token);
});
return; return;
} }
@@ -152,9 +148,7 @@ export const TAxios = (
if (!tokenRefreshing) { if (!tokenRefreshing) {
dispatch(getAuthenticationCode()); dispatch(getAuthenticationCode());
} }
checkAccessToken().then((token) => { pushQueue();
executeRequest(token);
});
} }
return; return;
} }
@@ -202,7 +196,13 @@ export const TAxios = (
} }
}; };
checkAccessToken().then((token) => { const accessToken = getState().localSettings.accessToken;
executeRequest(token); if (noTokenRefresh || (!tokenRefreshing && accessToken)) {
}); executeRequest(accessToken);
} else {
if (!accessToken && !tokenRefreshing) {
dispatch(getAuthenticationCode());
}
pushQueue();
}
}; };