Skip to content

Commit

Permalink
Merge pull request #80 from KERT-core/fix/api-conditional
Browse files Browse the repository at this point in the history
Fix/ApiConditional -
  • Loading branch information
Village-GG-Water authored Nov 7, 2024
2 parents 8f30845 + 7d9789e commit c1cb3aa
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 17 deletions.
2 changes: 1 addition & 1 deletion src/components/display/HistoryPreview.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ export const HistoryPreview = () => {
const keys = Object.keys(displayData).reverse();
setDisplayYear(keys[0]);
setDisplayKey(keys.slice(0, 4));
}, [data, displayData]);
}, [data, displayData, isError, isLoading]);

if (isLoading) {
return <></>;
Expand Down
1 change: 1 addition & 0 deletions src/components/navigation/AuthContext.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export const AuthProvider = ({ children }) => {
localStorage.removeItem('user');
setIsLoggedIn(false);
setUser(null);
window.location.href = '/';
}
};

Expand Down
3 changes: 1 addition & 2 deletions src/pages/MyPage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -323,10 +323,9 @@ export default function MyPage() {
);
if (!confirmDelete) return;
// 계정 삭제 요청
const token = localStorage.getItem('accessToken');
API.DELETE(`/users/${user.student_id}`, {
headers: {
Authorization: token,
Authorization: localStorage.getItem('sessionStorageToken'),
},
})
.then(() => {
Expand Down
25 changes: 11 additions & 14 deletions src/utils/api.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import axios from 'axios';

// API URL과 인증 토큰 저장 경로
const API_URL = import.meta.env.VITE_BACKEND_URL;
let accessToken = localStorage.getItem('accessToken');
let refreshToken = localStorage.getItem('refreshToken');
const API_URL = import.meta.env.VITE_BACKEND_URL ?? '';

// axios 인스턴스 생성
const api = axios.create({
Expand All @@ -17,8 +15,8 @@ const api = axios.create({
// 요청 인터셉터: 모든 요청에 액세스 토큰을 헤더에 포함
api.interceptors.request.use(
(config) => {
if (accessToken) {
config.headers.Authorization = accessToken;
if (localStorage.getItem('accessToken')) {
config.headers.Authorization = localStorage.getItem('accessToken');
}
return config;
},
Expand All @@ -33,26 +31,25 @@ api.interceptors.response.use(

// 토큰이 만료되어 401이나 403 응답이 온 경우
if (
(error.response.status === 401 || error.response.status === 403) &&
(error.response?.status === 401 || error.response?.status === 403) &&
!originalRequest._retry &&
refreshToken
localStorage.getItem('accessToken') &&
localStorage.getItem('refreshToken')
) {
originalRequest._retry = true; // 무한 루프 방지

try {
// 리프레시 토큰으로 새로운 액세스 토큰 요청
const { data } = await axios.post(`${API_URL}/api/auth/refresh`, {
refresh_token: refreshToken,
refresh_token: localStorage.getItem('refreshToken'),
});

// 새로운 액세스 토큰 저장
accessToken = data.access_token;
refreshToken = data.refresh_token;
localStorage.setItem('accessToken', accessToken);
localStorage.setItem('refreshToken', refreshToken);
localStorage.setItem('accessToken', data.accessToken);
localStorage.setItem('refreshToken', data.refreshToken);

// 실패했던 요청에 새로운 토큰 적용
originalRequest.headers.Authorization = accessToken;
originalRequest.headers.Authorization =
localStorage.getItem('accessToken');

// 실패한 요청 다시 시도
return api(originalRequest);
Expand Down

0 comments on commit c1cb3aa

Please sign in to comment.