Skip to content

Commit acfbf3e

Browse files
authored
Merge pull request #252 from boostcampwm2023/feat/routerFunction
feat : PublicRouter, PrivateRouter 함수 개선
2 parents b9cf4d0 + 0ae0d2e commit acfbf3e

File tree

6 files changed

+29
-35
lines changed

6 files changed

+29
-35
lines changed

frontend/src/AppRouter.tsx

+11-19
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,16 @@ import GlobalErrorBoundary from "./GlobalErrorBoundary";
66
import PrivateRoute from "./components/common/route/PrivateRoute";
77
import PublicRoute from "./components/common/route/PublicRoute";
88

9-
const createPrivateRouter = (children: RouteObject[]) => {
10-
const privateRoute = {
11-
element: <PrivateRoute />,
12-
children,
13-
};
14-
return privateRoute;
15-
};
9+
type RouteType = "PRIVATE" | "PUBLIC";
1610

17-
const createPublicRouter = (children: RouteObject[]) => {
18-
const publicRoute = {
19-
element: <PublicRoute />,
20-
children,
21-
};
22-
return publicRoute;
11+
const createAuthCheckRouter = (routeType: RouteType, children: RouteObject[]) => {
12+
const authCheckRouter = children.map((child: RouteObject) => {
13+
return {
14+
element: routeType === "PRIVATE" ? <PrivateRoute /> : <PublicRoute />,
15+
children: [child],
16+
};
17+
});
18+
return authCheckRouter;
2319
};
2420

2521
const router = createBrowserRouter([
@@ -35,25 +31,21 @@ const router = createBrowserRouter([
3531
index: true,
3632
element: <TempHomepage />,
3733
},
38-
createPublicRouter([
34+
...createAuthCheckRouter("PUBLIC", [
3935
{
4036
path: ROUTER_URL.LOGIN,
4137
element: <LoginPage />,
4238
},
43-
]),
44-
createPublicRouter([
4539
{
4640
path: ROUTER_URL.SIGNUP,
4741
element: <SignupPage />,
4842
},
49-
]),
50-
createPublicRouter([
5143
{
5244
path: `${ROUTER_URL.AUTH}/*`,
5345
element: <AuthPage />,
5446
},
5547
]),
56-
createPrivateRouter([
48+
...createAuthCheckRouter("PRIVATE", [
5749
{
5850
path: ROUTER_URL.PROJECTS,
5951
element: <ProjectsPage />,

frontend/src/apis/api/loginAPI.ts

+6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
AccessTokenResponse,
55
AuthenticationDTO,
66
GithubOauthUrlDTO,
7+
RefreshDTO,
78
TempIdTokenResponse,
89
} from "../../types/authDTO";
910
import { useNavigate } from "react-router-dom";
@@ -42,3 +43,8 @@ export const postLogout = async () => {
4243
return response;
4344
}
4445
};
46+
47+
export const postRefresh = async () => {
48+
const response = await authAPI.post<RefreshDTO>(API_URL.REFRESH);
49+
setAccessToken(response.data.accessToken);
50+
};

frontend/src/apis/utils/authAPI.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import axios, { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from "axios";
22
import { API_URL, BASE_URL } from "../../constants/path";
3-
import { AccessTokenResponse } from "../../types/authDTO";
3+
import { RefreshDTO } from "../../types/authDTO";
44

55
let accessToken: string | undefined;
66

@@ -44,7 +44,7 @@ const failResponse = async (error: AxiosError) => {
4444
}
4545

4646
try {
47-
const response = await authAPI.post<AccessTokenResponse>(API_URL.REFRESH);
47+
const response = await authAPI.post<RefreshDTO>(API_URL.REFRESH);
4848
successRefresh(response.data.accessToken, error.config);
4949
} catch {
5050
unauthorizedErrorRetry = 0;
@@ -63,7 +63,6 @@ const successRefresh = async (
6363
if (config) {
6464
config.headers["Authorization"] = `Bearer ${newAccessToken}`;
6565
const newResponse = await authAPI(config);
66-
6766
return newResponse;
6867
}
6968
};

frontend/src/components/common/route/PrivateRoute.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@ import { useErrorBoundary } from "react-error-boundary";
55
import RouteLoading from "./RouteLoading";
66

77
const PrivateRoute = (): React.ReactElement => {
8-
const [isLoading, setIsLoading] = useState<Boolean>(false);
8+
const [loadingState, setLoadingState] = useState<Boolean>(true);
99
const { showBoundary } = useErrorBoundary();
1010

1111
useEffect(() => {
1212
checkAuthentication().then((result: Boolean | unknown) => {
1313
if (result === true) {
14-
setIsLoading(true);
14+
setLoadingState(false);
1515
} else {
1616
showBoundary(result);
1717
}
1818
});
1919
}, [checkAuthentication]);
2020

21-
return isLoading ? <Outlet /> : <RouteLoading />;
21+
return loadingState ? <RouteLoading /> : <Outlet />;
2222
};
2323

2424
export default PrivateRoute;

frontend/src/components/common/route/PublicRoute.tsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,22 @@ import { Navigate, Outlet } from "react-router-dom";
55
import { ROUTER_URL } from "../../../constants/path";
66

77
const PublicRoute = () => {
8-
const [isLoading, setIsLoading] = useState<Boolean>(false);
8+
const [loadingState, setLoadingState] = useState<Boolean>(true);
99
const [authenticated, setAuthenticated] = useState<Boolean>(false);
1010

1111
useEffect(() => {
1212
checkAuthentication().then((result) => {
1313
if (result === true) {
14-
setIsLoading(true);
14+
setLoadingState(false);
1515
setAuthenticated(true);
1616
} else {
17-
setIsLoading(true);
17+
setLoadingState(false);
1818
setAuthenticated(false);
1919
}
2020
});
2121
}, [checkAuthentication]);
2222

23-
return !isLoading ? (
23+
return loadingState ? (
2424
<RouteLoading />
2525
) : !authenticated ? (
2626
<Outlet />

frontend/src/utils/route/checkAuthentication.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1-
import { authAPI, checkAccessToken, setAccessToken } from "../../apis/utils/authAPI";
2-
import { API_URL } from "../../constants/path";
3-
import { RefreshDTO } from "../../types/authDTO";
1+
import { postRefresh } from "../../apis/api/loginAPI";
2+
import { checkAccessToken } from "../../apis/utils/authAPI";
43

54
const checkAuthentication = async (): Promise<boolean | unknown> => {
65
if (checkAccessToken()) return true;
7-
86
try {
9-
const response = await authAPI.post<RefreshDTO>(API_URL.REFRESH);
10-
setAccessToken(response.data.accessToken);
7+
await postRefresh();
118
return true;
129
} catch (error) {
1310
return error;

0 commit comments

Comments
 (0)