import { useState, useEffect } from 'react';
import { useNavigate } from 'react-router-dom';
/**
* 회원 인증 상태 관리 훅.
* - isLoggedIn: 로그인 여부
* - member: 회원 정보
* - requireLogin(redirectPath): 비회원이면 로그인 페이지로 이동
*/
export function useMemberAuth() {
const navigate = useNavigate();
const [member, setMember] = useState(null);
const [loaded, setLoaded] = useState(false);
useEffect(() => {
const token = localStorage.getItem('member_token');
const user = localStorage.getItem('member_user');
if (token && user) {
try { setMember(JSON.parse(user)); } catch { /* 손상된 데이터 무시 */ }
}
setLoaded(true);
}, []);
const logout = () => {
localStorage.removeItem('member_token');
localStorage.removeItem('member_user');
setMember(null);
navigate('/');
};
const requireLogin = (redirectPath = window.location.pathname) => {
if (!member) {
navigate(`/login?redirect=${encodeURIComponent(redirectPath)}`);
return false;
}
return true;
};
return {
member,
isLoggedIn: !!member,
loaded,
logout,
requireLogin,
};
}
/**
* 회원 전용 접근 보호 컴포넌트.
* 비로그인 시 잠금 오버레이 표시.
*
* 사용:
*