[개인 포트폴리오] [트위터 클론 SNS Deli] 분석 Part. 6 'protected-route.tsx'
2024. 7. 8. 16:30ㆍ웹개발 포트폴리오
728x90
반응형
protected-route.tsx
import React from 'react';
import { Navigate } from 'react-router-dom';
import { useAuthState } from 'react-firebase-hooks/auth';
import { auth } from '../firebase';
// children prop은 보호된 라우트 내부에서 렌더링될 컴포넌트를 의미합니다.
// JSX.Element 타입은 리액트 엘리먼트(UI 구성 기본 단위)를 나타냅니다.
interface ProtectedRouteProps {
children: JSX.Element;
}
// ProtectedRoute 컴포넌트: 인증이 필요한 라우트를 보호하기 위한 함수형 컴포넌트입니다.
// FC: FunctionComponent의 약자
// FC를 사용하면 컴포넌트의 props에 대한 타입 검사를 자동으로 처리하고, children prop을 기본적으로 포함하는 등의 유용한 기능을 제공
const ProtectedRoute: React.FC<ProtectedRouteProps> = ({ children }) => {
// useAuthState 훅을 사용하여 현재 사용자의 인증 상태(user)와 로딩 상태(loading)를 가져옵니다.
const [user, loading] = useAuthState(auth);
// 로딩 중일 때는 "Loading..." 메시지를 표시합니다.
if (loading) {
return <div>Loading...</div>;
}
// 사용자가 인증되지 않은 경우 로그인 페이지로 리디렉션합니다.
if (!user) {
return <Navigate to="/login" replace />;
}
// 인증된 사용자의 경우 자식 컴포넌트를 렌더링합니다.
return children;
};
export default ProtectedRoute;
이 코드는 인증된 사용자가 특정 경로에 접근하도록 보호하는 ProtectedRoute 컴포넌트를 구현합니다. 인증 상태를 확인하여 로딩 중이면 로딩 메시지를, 인증되지 않은 경우 로그인 페이지로 리디렉션합니다. 인증된 경우에만 자식 컴포넌트를 렌더링합니다.
728x90
반응형