token 갱신방식을 delay 방식에서 queue 방식으로 변경
This commit is contained in:
@@ -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) => {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user