React는 새로고침하면 state가 사라지기 때문에 로그인 정보는 localStorage처럼 브라우저 저장소에 보존
<aside> ✏️
유저가 없으면 로그인 페이지로 리다이렉트
</aside>
<aside> 📌
인증된 사용자만 접근할 수 있도록 제한된 웹 페이지나 리소스 ****
예: authUser 있으면 course 페이지 허용, 아니라면 로그인 페이지 이동 ← 이러한 조건을 코드로 표현하는 것
| 상태 | 결과 |
|---|---|
| 로그인 O | /course 접근 가능 |
| 로그인 X | /course 접근 시 자동으로 /login 리다이렉트 |
| </aside> |
<aside> 📌
<aside> 📌
import { useAuth } 추가
ftontend/App.jsx
frontend/component/Navbar.jsx
</aside>
React Functional Componet 생성
↓
CreateContext( ) 생성
↓
AuthProvider({ children }) 내에 하위 컴포넌트 저장
↓
Provider로 감싸기
↓
모든 하위 컴포넌트에서 AuthContext 접근 가능
localStorage.setItem("Users", JSON.stringify(res.data.user));
import React, { createContext, useContext, useState } from "react";
// Context를 통해 로그인 정보(authUser)를 전체 앱에서 공유
export const AuthContext = createContext();
export default function AuthProvider({ children }) {
const initialAuthUser = localStorage.getItem("Users");
const [authUser, setAuthUser] = useState(
initialAuthUser ? JSON.parse(initialAuthUser) : undefined
);
return (
// Porvider로 감싸 authUser, setAuthUser를 모든 컴포넌트에서 사용 가능하게 전달
<AuthContext.Provider value={{ authUser, setAuthUser }}>
{children}
</AuthContext.Provider>
);
}
export const useAuth = () => useContext(AuthContext);
import { useAuth } from "../context/AuthProvider";
function Logout() {
const { authUser, setAuthUser } = useAuth();
try {
// 상태(유저 정보) 초기화
setAuthUser({
...authUser,
user: null,
});
// 로컬 스토리지에서 유저 제거
localStorage.removeItem("Users");
.
.
.