Skip to content
Snippets Groups Projects
Commit da7bccf3 authored by 정원제's avatar 정원제 :guitar:
Browse files

refactor: 토큰 활성 시간 경과 시 로그인 페이지로 이동

parent c0c30506
Branches
No related tags found
1 merge request!41refactor: 토큰 활성 시간 경과 시 로그인 페이지로 이동
Pipeline #10826 failed
......@@ -2,10 +2,12 @@ import React from "react";
import { BrowserRouter as Router } from "react-router-dom";
import Layout from "./layout";
import AppRoutes from "./AppRoutes";
import TokenExpirationChecker from './components/TokenExpirationChecker';
function App() {
return (
<Router>
<TokenExpirationChecker />
<Layout>
<AppRoutes />
</Layout>
......
......@@ -10,7 +10,19 @@ const api = axios.create({
api.interceptors.request.use(config => {
const token = sessionStorage.getItem('accessToken');
const expiresAt = sessionStorage.getItem('tokenExpiresAt');
if (token) {
// 토큰 만료 체크
if (expiresAt && Date.now() >= parseInt(expiresAt)) {
sessionStorage.removeItem('accessToken');
sessionStorage.removeItem('tokenExpiresAt');
if (!window.location.pathname.includes('/login')) {
alert('로그인이 만료되었습니다. 다시 로그인해주세요.');
window.location.href = '/login';
}
return Promise.reject('Token expired');
}
config.headers.Authorization = `Bearer ${token}`;
}
return config;
......@@ -19,10 +31,16 @@ api.interceptors.request.use(config => {
api.interceptors.response.use(
response => response,
error => {
// 401 에러 처리
if (error.response?.data.statusCode === 401) {
sessionStorage.removeItem('accessToken');
sessionStorage.removeItem('tokenExpiresAt');
if (!window.location.pathname.includes('/login')) {
alert('로그인이 필요합니다. 로그인 페이지로 이동합니다.');
window.location.href = '/login';
}
}
return Promise.reject(error);
}
);
......
......@@ -15,6 +15,7 @@ const LoginPage = () => {
const data = await axiosLogin({ email, password });
if (data && data.token) {
sessionStorage.setItem('accessToken', data.token);
sessionStorage.setItem('tokenExpiresAt', data.expiresAt.toString());
setMessage(`로그인 성공!`);
window.location.href = '/';
} else {
......
......@@ -163,6 +163,8 @@ const SignupModal = ({ onClose }) => {
const result = await axiosSignup(formData);
if (result) {
sessionStorage.setItem('accessToken', result.token);
// 만료 시간도 저장
sessionStorage.setItem('tokenExpiresAt', result.expiresAt.toString());
window.location.href = '/';
}
} catch (error) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment