STUDY/Project

인증이 필요한 보호 페이지 - ProtectedRoute, DashboardPage

Y.Choi 2025. 5. 4. 11:54
728x90
반응형

 

로그인 후에만 접근 가능한 보호 페이지이다. 

사용자가 로그인 상태일 때만 접근이 가능하고 로그인이 되어있지 않으면 강제로 로그인페이지로 이동시킨다.

또, localStorage를 사용해 새로고침을 해도 로그인 상태를 유지하게 한다.

 

 

| 컴포넌트 만들기

 

frontend/src/components/ProtectedRoute.js

import React from 'react';
import { Navigate } from 'react-router-dom';

const ProtectedRoute = ({ children }) => {
  const token = localStorage.getItem('token');
  return token ? children : <Navigate to="/login" />;
};

export default ProtectedRoute;

 

/ children : <ProtectedRoute>로 감싼 내부 컴포넌트를 의미한다.

/ token이 없으면 로그인 페이지로 리디렉션 (<Navigate to="/login" />) 한다.

 

 

 

| DashboardPage 페이지 만들기

 

frontend/src/pages/DashboardPage.js

import React from 'react';

const DashboardPage = () => {
  const user = JSON.parse(localStorage.getItem('user'));

  return (
    <div>
      <h2>대시보드</h2>
      <p>환영합니다, {user?.name}님!</p>
    </div>
  );
};

export default DashboardPage;

 

 

 

| 라우터에서 보호 라우트 적용

 

frontend/src/App.js

import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import RegisterPage from './pages/RegisterPage';
import LoginPage from './pages/LoginPage';
import DashboardPage from './pages/DashboardPage';
import ProtectedRoute from './components/ProtectedRoute';

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/register" element={<RegisterPage />} />
        <Route path="/login" element={<LoginPage />} />
        <Route
          path="/dashboard"
          element={
            <ProtectedRoute>
              <DashboardPage />
            </ProtectedRoute>
          }
        />
      </Routes>
    </Router>
  );
}

export default App;

 

 

앞으로 인증된 사용자만 접근할 수 있는 페이지들은 이렇게 <ProtectedRoute>로 감싸서 사용하면 된다.

728x90
반응형