Skip to content

Commit ad50f91

Browse files
authored
Merge pull request #137 from imaginer-dev/126-로그인-세션-확인-및-메인-페이지로-리디렉션
feat: 권한 없을시 리디렉션 시키는 프로텍터 추가
2 parents 0f19e08 + 2e6ee32 commit ad50f91

File tree

5 files changed

+60
-2
lines changed

5 files changed

+60
-2
lines changed

src/apis/sessionApis.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import supabase from '@/supabase';
2+
3+
export const getSession = async () => {
4+
const { data, error } = await supabase.auth.getSession();
5+
6+
if (error) {
7+
throw error;
8+
}
9+
10+
return data;
11+
};

src/main.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,18 @@ import App from './App.tsx';
66
import TextInputForm from './pages/InputFormTest.tsx';
77
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
88
import { JoinPage, LoginPage, ResetPwPage, NotFound, Policy } from './pages/index.ts';
9+
import ProtectedRoute from './providers/ProtectedRoute.tsx';
910

1011
import UserInvite from './components/common/UserInvite.tsx';
1112

1213
const router = createBrowserRouter([
1314
{
1415
path: '/',
15-
element: <App />,
16+
element: (
17+
<ProtectedRoute>
18+
<App />
19+
</ProtectedRoute>
20+
),
1621
},
1722
{
1823
path: '/login',

src/providers/ProtectedRoute.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Loading } from '@/pages';
2+
import { useGetSession } from '@/react-queries/useGetSession';
3+
import { FC, ReactNode } from 'react';
4+
import { useNavigate } from 'react-router-dom';
5+
6+
interface Props {
7+
children: ReactNode;
8+
}
9+
10+
const ProtectedRoute: FC<Props> = ({ children }) => {
11+
const { data, isError, error, isLoading } = useGetSession();
12+
const navigate = useNavigate();
13+
14+
if (isError) {
15+
throw error;
16+
}
17+
18+
if (isLoading) {
19+
return <Loading display="spinner" size="lg" color="primary" />;
20+
}
21+
22+
if (!data?.session) {
23+
navigate('/login');
24+
}
25+
26+
return children;
27+
};
28+
29+
export default ProtectedRoute;

src/react-queries/queryKeys.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
import { createQueryKeyStore } from '@lukemorales/query-key-factory';
22

3-
export const queries = createQueryKeyStore({});
3+
export const queries = createQueryKeyStore({
4+
session: {
5+
getSession: null,
6+
},
7+
});

src/react-queries/useGetSession.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { useQuery } from '@tanstack/react-query';
2+
import { queries } from './queryKeys';
3+
import { getSession } from '@/apis/sessionApis';
4+
5+
export const useGetSession = () =>
6+
useQuery({
7+
queryKey: queries.session.getSession.queryKey,
8+
queryFn: getSession,
9+
});

0 commit comments

Comments
 (0)