Firebase의 auth를 사용하여 인증된 사용자만 접근 가능한 라우트 컴포넌트를 만들어보자.
// children props: component 내부의 모든 것
export default function ProtectedRoute({
children,
}: {
children: React.ReactNode;
}) {
// 유저가 로그인했는지 확인
// 로그인 유저: 유저의 값, 로그인하지 않은 유저: null return
const user = auth.currentUser;
// 로그인 유저가 아닐 경우 로그인 페이지로 리다이렉트
if (user === null) {
return <Navigate to="/login" />;
}
return children;
}
- 위와 같이 보호된 라우트를 만들고, 유저의 로그인 여부를 체크한다.
- auth.currentUser의 경우 유저의 값을 반환해주는데, 로그인하지 않은 경우 null을 반환한다.
- 로그인 유저가 아닐 경우, login 페이지로 리다이렉트 해준다.
- ProtectedRoute의 매개변수인 children은 component 내부의 모든 것을 의미한다.
const router = createBrowserRouter([
{
path: "/",
// 로그인 유저만 접근
element: (
<ProtectedRoute>
<Layout />
</ProtectedRoute>
),
children: [
{
path: "",
element: <Home />,
},
{
path: "profile",
element: <Profile />,
},
],
},
- 이 후 로그인 유저만 접근이 가능한 페이지를 위에서 만든 라우트 컴포넌트로 감싸주면 끝!
- 위의 경우, / 경로(Home)과 /profile 경로는 로그인한 유저만 접근 가능하므로, Layout 라우트에 감싸주었다
'[Study] 개발 공부 > [React] 리액트 공부' 카테고리의 다른 글
[React+Vite/TS] Firebase로 쉽게 Github 로그인 구현하기 (0) | 2024.05.27 |
---|---|
[React+Vite/TS] 에러핸들링과 로그인, 공통 컴포넌트 분리하기 (0) | 2024.05.27 |
[React+Vite/TS] Firebase 사용하여 이메일/비밀번호로 계정 생성하기 (0) | 2024.05.14 |
Loading 상태와 컴포넌트 (1) | 2024.05.02 |
GlobalStyles 적용하기 (0) | 2024.05.01 |