sm 기술 블로그

[리액트] 페이지 접근제한(PrivateRoute) 본문

리액트

[리액트] 페이지 접근제한(PrivateRoute)

sm_hope 2022. 9. 12. 21:51

리액트를 이용하여 프론트를 제작할 때 우리는 로그인한 상태에서만 보여주고 싶은 페이지가 있을 것이다.

이때 PrivateRoute를 통해 문제를 해결할 수 있다.

App

import "./App.css";
import MainPage from "./Router/MainPage.jsx";
import MessengerPage from "./Router/Messenger.jsx";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import PrivateRoute from "./Router/PrivateRoute.jsx";

function App() {
 const access = localStorage.getItem("Token");
 return (
  <Router>
   <Routes>
    <Route path="/" element={<MainPage />}></Route>
    <Route path="/MessengerPage" element={<PrivateRoute authenticated={access} component={<MessengerPage />} />}></Route>
   </Routes>
  </Router>
 );
}

export default App;

access의 정보는 서버로 부터 받은 jwt가 담당한다.

로그인을 하면 localStorage에 Token 정보를 저장하는데, 만약 이 토큰 정보가 없다면 access 상수는 null이 된다.

 

/MessengerPage를 들어갈때, PrivateRoute를 거치게 되는데 access와 MessengerPage컴포넌트를 PrivateRoute에게 전달한다.

 

PrivateRoute

// src/Router/PrivateRoute.jsx
import React from "react";
import {Navigate} from "react-router-dom";

const PrivateRoute = ({authenticated, component: Component}) => {
  return (
    authenticated ? Component : <Navigate to="/"/>
  );
}

export default PrivateRoute;

 

 App으로부터 autheticated와 component를 넘겨받아 삼항연산자를 통해 authenticated가 있다면 전달받은 Component로 그게 아니라면 루트페이지("/")로 이동한다.

 

'리액트' 카테고리의 다른 글

[리액트] jwt 디코딩  (0) 2022.09.18
[리액트] state 이전값 기억  (0) 2022.09.16
[리액트] Redux  (0) 2022.09.12
[리액트] navigate (페이지 이동)  (0) 2022.09.07
비밀번호 보기/ 숨기기 기능 - 코드  (0) 2022.09.04
Comments