로그인을 필수로하는
Profile
컴포넌트를 리턴하기 전에requiredAuth
라는 고차 컴포넌트가 로그인 여부를 판단하는 로직을 거쳐 로그인을 했으면 그대로Profile
컴포넌트를 리턴하고, 로그인을 하지 않았으면Login
컴포넌트를 리턴한다.
return
안에서 고차 컴포넌트를 사용하면 안된다.export const isLoggedIn = () => {
/// 세션, 쿠키, 로컬 스토리지 등을 사용하여 로그인 상태를 확인
/// 로그인한 생태인 경우 true, 로그인하지 않은 상태일 경우 false
};
// requiredAuth.js
import { useRecoilState } from "recoil";
import { accessTokenAtom } from "../recoil/auth";
import LoginPage from "../page/Login/LoginPage";
const requiredAuth = (Component) => {
return (props) => {
const [isLoggedIn, setIsLoggedIn] = useRecoilState(accessTokenAtom);
if (!isLoggedIn) {
return <LoginPage />;
}
return <Component {...props} />;
};
};
export default requiredAuth;
// Profile.jsx
import React from 'react';
import requiredAuth from './requireAuth';
const ProfilePage = () => {
return (
<div>
{/* 페이지 컨텐츠 */}
</div>
);
};
export default requiredAuth(ProfilePage);
Profile
페이지에 접근하게 되면 로그인 페이지로 리다이렉트하게 된다.https://ko.legacy.reactjs.org/docs/higher-order-components.html
https://velog.io/@leitmotif/React%EC%97%90%EC%84%9C%EC%9D%98-%EA%B3%A0%EC%B0%A8-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8