Skip to content

Commit 2ecaa8e

Browse files
committed
chore: 헤더에 Authorization 설정
1 parent 1ba30a2 commit 2ecaa8e

File tree

5 files changed

+44
-7
lines changed

5 files changed

+44
-7
lines changed

.env.example

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
VITE_API_BASE_URL=
2-
VITE_KAKAO_MAP_API_KEY=
2+
VITE_KAKAO_MAP_API_KEY=
3+
VITE_HEADER_TOKEN=

src/app/provider/AuthContext.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { createContext, useState, useContext, ReactNode } from 'react';
2+
3+
interface AuthContextType {
4+
isModalOpen: boolean;
5+
openModal: () => void;
6+
closeModal: () => void;
7+
}
8+
9+
const AuthContext = createContext<AuthContextType | undefined>(undefined);
10+
11+
export const AuthProvider = ({ children }: { children: ReactNode }) => {
12+
const [isModalOpen, setIsModalOpen] = useState(false);
13+
14+
return (
15+
<AuthContext.Provider
16+
value={{ isModalOpen, openModal: () => setIsModalOpen(true), closeModal: () => setIsModalOpen(false) }}
17+
>
18+
{children}
19+
</AuthContext.Provider>
20+
);
21+
};
22+
23+
export const useAuth = () => {
24+
const context = useContext(AuthContext);
25+
if (!context) {
26+
throw new Error('useAuth must be used within an AuthProvider');
27+
}
28+
return context;
29+
};

src/main.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@ import { RouterProvider } from 'react-router-dom';
44
import router from './app/routes/Router';
55
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
66
import './index.css';
7+
import { AuthProvider } from './app/provider/AuthContext';
78

89
const queryClient = new QueryClient();
910

1011
createRoot(document.getElementById('root')!).render(
1112
<StrictMode>
1213
<QueryClientProvider client={queryClient}>
13-
<RouterProvider router={router} />
14+
<AuthProvider>
15+
<RouterProvider router={router} />
16+
</AuthProvider>
1417
</QueryClientProvider>
1518
</StrictMode>
1619
);

src/pages/home/ui/MainPage.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import leftButton from '../../../../public/assets/main/LeftButton.svg';
1818
import { AnimatePresence } from 'framer-motion';
1919
import LoginModal from '../../../widgets/main/ui/LoginModal';
2020
import { cardButtons } from '../../../shared/types/mainCardButtonType';
21+
import { useAuth } from '../../../app/provider/AuthContext';
2122

2223
const MainPage = () => {
2324
const images = [
@@ -26,12 +27,12 @@ const MainPage = () => {
2627
{ img: thirdPage, link: 'https://example.com/page3' },
2728
];
2829

29-
const [modalOpen, setModalOpen] = useState(false);
3030
const [latestStartIndex, setLatestStartIndex] = useState<number>(0);
3131
const [trendingStartIndex, setTrendingStartIndex] = useState<number>(0);
3232
const [closingStartIndex, setClosingStartIndex] = useState<number>(0);
3333
const maxCardsToShow = 2;
3434
const navigate = useNavigate();
35+
const { isModalOpen, openModal, closeModal } = useAuth();
3536

3637
type SetStartIndex = Dispatch<SetStateAction<number>>;
3738

@@ -57,9 +58,9 @@ const MainPage = () => {
5758
leftButtonClassName="sm:text-lg md:text-xl lg:text-2xl font-extrabold font-nexon"
5859
leftButtonClick={() => {}}
5960
leftButtonLabel="같이가요"
60-
rightContent={<SecondaryButton size="large" color="black" label="로그인" onClick={() => setModalOpen(true)} />}
61+
rightContent={<SecondaryButton size="large" color="black" label="로그인" onClick={openModal} />}
6162
/>
62-
<AnimatePresence>{modalOpen && <LoginModal onClose={() => setModalOpen(false)} />}</AnimatePresence>
63+
<AnimatePresence>{isModalOpen && <LoginModal onClose={closeModal} />}</AnimatePresence>
6364

6465
<div className="w-full px-6">
6566
<Banner images={images} interval={5000} />

src/shared/types/api/http-client.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import axios, { AxiosError, AxiosResponse } from 'axios';
22
import { ApiErrorResponse } from './apiResponse';
33

44
export const axiosClient = axios.create({
5-
baseURL: '/api/v1',
5+
baseURL: 'http://ec2-3-35-48-123.ap-northeast-2.compute.amazonaws.com:8080/api/v1',
66
timeout: 3000,
77
headers: {
88
'Content-Type': 'application/json',
9+
Authorization: `Bearer ${import.meta.env.VITE_HEADER_TOKEN}`,
910
},
1011
});
1112

@@ -41,7 +42,9 @@ axiosClient.interceptors.response.use(
4142
// 401(토큰 만료)일 경우 로그아웃 처리 or 토큰 갱신 가능
4243
if (errorInfo.status === 401) {
4344
localStorage.removeItem('access_token');
44-
window.location.href = '/login'; // 로그인 페이지로 이동
45+
import('../../../app/provider/AuthContext').then(({ useAuth }) => {
46+
useAuth().openModal();
47+
});
4548
}
4649

4750
return Promise.reject(errorInfo);

0 commit comments

Comments
 (0)