From c2f245bda6b239cb77a4af24f602eb49fbf3f983 Mon Sep 17 00:00:00 2001 From: daun-up Date: Wed, 30 Apr 2025 12:38:13 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20401=20=EC=BD=94=EB=93=9C=20=EC=8B=9C?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EB=A1=9C=20=EB=A6=AC=EB=8B=A4=EC=9D=B4=EB=A0=89=ED=8A=B8=20?= =?UTF-8?q?=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/privateAxiosInstance.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/services/privateAxiosInstance.ts b/src/services/privateAxiosInstance.ts index 5fd8f20..2b34cb2 100644 --- a/src/services/privateAxiosInstance.ts +++ b/src/services/privateAxiosInstance.ts @@ -14,6 +14,17 @@ const getAccessToken = (): string | null => { return ''; }; +const redirectToLogin = () => { + const { pathname } = window.location; + const redirectPages = ['/desktop/login', '/mobile/sign-in']; + + if (!redirectPages.includes(pathname)) { + window.location.replace( + pathname.startsWith('/desktop') ? '/desktop/login' : '/mobile/sign-in', + ); + } +}; + const PrivateAxiosInstance = axios.create({ baseURL: process.env.NEXT_PUBLIC_API_BASE_URI, headers: { @@ -21,6 +32,7 @@ const PrivateAxiosInstance = axios.create({ }, }); +// 요청 인터셉터 PrivateAxiosInstance.interceptors.request.use( (config: InternalAxiosRequestConfig) => { const token = getAccessToken(); From c30f0637022a585fc32f619672ea12828d083994 Mon Sep 17 00:00:00 2001 From: daun-up Date: Wed, 30 Apr 2025 12:38:17 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20401=20=EC=BD=94=EB=93=9C=20=EC=8B=9C?= =?UTF-8?q?=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EB=A1=9C=20=EB=A6=AC=EB=8B=A4=EC=9D=B4=EB=A0=89=ED=8A=B8=20?= =?UTF-8?q?=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/privateAxiosInstance.ts | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/services/privateAxiosInstance.ts b/src/services/privateAxiosInstance.ts index 2b34cb2..e6a4d3b 100644 --- a/src/services/privateAxiosInstance.ts +++ b/src/services/privateAxiosInstance.ts @@ -36,28 +36,27 @@ const PrivateAxiosInstance = axios.create({ PrivateAxiosInstance.interceptors.request.use( (config: InternalAxiosRequestConfig) => { const token = getAccessToken(); - if (!token) { - const redirectPages = ['/desktop/login', '/mobile/sign-in']; - const { pathname } = window.location; - - if (!redirectPages.includes(pathname)) { - window.location.replace( - pathname.startsWith('/desktop') - ? '/desktop/login' - : '/mobile/sign-in', - ); - } + if (!token) { + redirectToLogin(); return Promise.reject(new AxiosError('No authentication token found')); } const newConfig = { ...config, withCredentials: false }; - if (token) { - newConfig.headers.set('Authorization', `Bearer ${token}`); - } + newConfig.headers.set('Authorization', `Bearer ${token}`); return newConfig; }, (error) => Promise.reject(error), ); +PrivateAxiosInstance.interceptors.response.use( + (response) => response, + (error: AxiosError) => { + if (error.response?.status === 401) { + redirectToLogin(); + } + return Promise.reject(error); + }, +); + export default PrivateAxiosInstance; From 24b35ea9e306aa020727fc3ef6b3ef5cfc12e337 Mon Sep 17 00:00:00 2001 From: daun-up Date: Wed, 30 Apr 2025 14:23:35 +0900 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20redirect=20=EC=8B=9C=20localstroage?= =?UTF-8?q?=20=EC=B4=88=EA=B8=B0=ED=9A=8C=20=EB=90=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/item.ts | 4 ++++ src/services/privateAxiosInstance.ts | 1 + 2 files changed, 5 insertions(+) diff --git a/src/apis/item.ts b/src/apis/item.ts index 7d27dd7..02d3dd2 100644 --- a/src/apis/item.ts +++ b/src/apis/item.ts @@ -1,5 +1,6 @@ import { WelfareItemData } from '@/types/welfareItemType'; import PrivateAxiosInstance from '@/services/privateAxiosInstance'; +import { isAxiosError } from 'axios'; // 대여 가능한 복지물품 리스트 불러오기 // eslint-disable-next-line import/prefer-default-export @@ -13,6 +14,9 @@ export const getWelfareItems = async ( return response.data; } catch (error) { + if (isAxiosError(error)) { + console.log(error); + } throw new Error(`welfare 목록 불러오기에 실패했습니다: ${error}`); } }; diff --git a/src/services/privateAxiosInstance.ts b/src/services/privateAxiosInstance.ts index e6a4d3b..3849380 100644 --- a/src/services/privateAxiosInstance.ts +++ b/src/services/privateAxiosInstance.ts @@ -53,6 +53,7 @@ PrivateAxiosInstance.interceptors.response.use( (response) => response, (error: AxiosError) => { if (error.response?.status === 401) { + localStorage.clear(); redirectToLogin(); } return Promise.reject(error);