Skip to content

Commit 67b445b

Browse files
committed
fix : axios 로직 수정
1 parent ac3dec6 commit 67b445b

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

src/apis/axios.ts

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ export const instance = axios.create({
1010
baseURL: process.env.REACT_APP_BASE_URL,
1111
timeout: 10000,
1212
});
13+
1314
let isRefreshing = false;
1415
let refreshSubscribers: ((token: string) => void)[] = [];
1516

@@ -18,6 +19,10 @@ const onRefreshed = (token: string) => {
1819
refreshSubscribers = [];
1920
};
2021

22+
const subscribeTokenRefresh = (callback: (token: string) => void) => {
23+
refreshSubscribers.push(callback);
24+
};
25+
2126
instance.interceptors.request.use(
2227
(config) => {
2328
const accessToken = getCookie('access_token');
@@ -43,21 +48,25 @@ instance.interceptors.response.use(
4348
const refreshToken = getCookie('refresh_token');
4449

4550
if (!refreshToken) {
51+
console.warn('리프레시 토큰 없음. 로그인 필요함.');
4652
window.location.href = '/login';
4753
return Promise.reject(error);
4854
}
4955

5056
if (originalRequest._retry) {
57+
console.warn('이미 리트라이한 요청인데 실패함.');
58+
window.location.href = '/login';
5159
return Promise.reject(error);
5260
}
61+
5362
originalRequest._retry = true;
5463

5564
if (isRefreshing) {
5665
return new Promise((resolve) => {
57-
refreshSubscribers.push((token: string) => {
66+
subscribeTokenRefresh((newToken) => {
5867
originalRequest.headers = new AxiosHeaders({
5968
...originalRequest.headers,
60-
Authorization: `Bearer ${token}`,
69+
Authorization: `Bearer ${newToken}`,
6170
});
6271
resolve(instance(originalRequest));
6372
});
@@ -67,29 +76,36 @@ instance.interceptors.response.use(
6776
isRefreshing = true;
6877

6978
try {
79+
console.log('토큰 리프레시 요청');
7080
const res = await reIssueToken(refreshToken);
7181
const newAccessToken = res.access_token;
82+
const newRefreshToken = res.refresh_token;
83+
84+
if (!newAccessToken || !newRefreshToken) {
85+
throw new Error('리프레시 응답이 유효하지 않음');
86+
}
7287

7388
setCookie('access_token', newAccessToken, {
7489
expires: new Date(res.access_token_expired_at),
7590
});
7691

77-
setCookie('refresh_token', res.refresh_token, {
92+
setCookie('refresh_token', newRefreshToken, {
7893
expires: new Date(res.refresh_token_expired_at),
7994
});
8095

81-
isRefreshing = false;
8296
onRefreshed(newAccessToken);
83-
8497
originalRequest.headers = new AxiosHeaders({
8598
...originalRequest.headers,
8699
Authorization: `Bearer ${newAccessToken}`,
87100
});
101+
88102
return instance(originalRequest);
89103
} catch (err) {
90-
isRefreshing = false;
104+
console.error('토큰 재발급 실패:', err);
91105
window.location.href = '/login';
92106
return Promise.reject(err);
107+
} finally {
108+
isRefreshing = false;
93109
}
94110
}
95111

0 commit comments

Comments
 (0)