diff --git a/src/libs/api/index.ts b/src/libs/api/index.ts index 90a4a809..7ef99f39 100644 --- a/src/libs/api/index.ts +++ b/src/libs/api/index.ts @@ -31,21 +31,36 @@ request.interceptors.response.use( return res }, async (error) => { + if (!error.config.retryCount) { + // 요청에 재시도 횟수를 추적하는 속성이 없으면 초기화 + error.config.retryCount = 0 + } + if (error.response.status === 403) { const { setToast } = useToastify() + try { + error.config.retryCount += 1 + if (error.config.retryCount >= 3) { + throw new Error('예외 발생!') + } const getRefreshToken = await refreshApi() const prevRequest = error.config prevRequest.headers.Authorization = `Bearer ${getRefreshToken.appToken}` setItem('token', getRefreshToken.appToken) return request(prevRequest) } catch { - setToast({ - comment: '로그인을 다시 진행해주세요.', - type: 'info' - }) - await logoutApi() - throw new Error('failed to request refresh token') + if (error.config.retryCount >= 3) { + window.location.href = '/login' + localStorage.removeItem('token') + } else { + setToast({ + comment: '로그인을 다시 진행해주세요.', + type: 'info' + }) + await logoutApi() + throw new Error('failed to request refresh token') + } } } }