
로그인을 필수로하는
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