대시보드 구현
This commit is contained in:
@@ -29,6 +29,12 @@ import { SESSION_TIMEOUT_MS } from "@/features/auth/constants";
|
||||
// 설정: 경고 표시 시간 (타임아웃 1분 전) - 현재 미사용 (즉시 로그아웃)
|
||||
// const WARNING_MS = 60 * 1000;
|
||||
|
||||
const SESSION_RELATED_STORAGE_KEYS = [
|
||||
"session-storage",
|
||||
"auth-storage",
|
||||
"autotrade-kis-runtime-store",
|
||||
] as const;
|
||||
|
||||
/**
|
||||
* 세션 관리자 컴포넌트
|
||||
* 사용자 활동을 감지하여 세션 연장 및 타임아웃 처리
|
||||
@@ -51,6 +57,18 @@ export function SessionManager() {
|
||||
|
||||
const { setLastActive } = useSessionStore();
|
||||
|
||||
/**
|
||||
* @description 세션 만료 로그아웃 시 세션 관련 로컬 스토리지를 정리합니다.
|
||||
* @see features/layout/components/user-menu.tsx 수동 로그아웃 경로에서도 동일한 키를 제거합니다.
|
||||
*/
|
||||
const clearSessionRelatedStorage = useCallback(() => {
|
||||
if (typeof window === "undefined") return;
|
||||
|
||||
for (const key of SESSION_RELATED_STORAGE_KEYS) {
|
||||
window.localStorage.removeItem(key);
|
||||
}
|
||||
}, []);
|
||||
|
||||
/**
|
||||
* 로그아웃 처리 핸들러
|
||||
* @see session-timer.tsx - 타임아웃 시 동일한 로직 필요 가능성 있음
|
||||
@@ -64,11 +82,12 @@ export function SessionManager() {
|
||||
|
||||
// [Step 3] 로컬 스토어 및 세션 정보 초기화
|
||||
useSessionStore.persist.clearStorage();
|
||||
clearSessionRelatedStorage();
|
||||
|
||||
// [Step 4] 로그인 페이지로 리다이렉트 및 메시지 표시
|
||||
router.push("/login?message=세션이 만료되었습니다. 다시 로그인해주세요.");
|
||||
router.refresh();
|
||||
}, [router]);
|
||||
}, [clearSessionRelatedStorage, router]);
|
||||
|
||||
useEffect(() => {
|
||||
if (isAuthPage) return;
|
||||
@@ -79,6 +98,10 @@ export function SessionManager() {
|
||||
if (showWarning) setShowWarning(false);
|
||||
};
|
||||
|
||||
// [Step 0] 인증 페이지에서 메인 페이지로 진입한 직후를 "활동"으로 간주해
|
||||
// 이전 세션 잔여 시간(예: 00:00)으로 즉시 로그아웃되는 현상을 방지합니다.
|
||||
updateLastActive();
|
||||
|
||||
// [Step 1] 사용자 활동 이벤트 감지 (마우스, 키보드, 스크롤, 터치)
|
||||
const events = ["mousedown", "keydown", "scroll", "touchstart"];
|
||||
const handleActivity = () => updateLastActive();
|
||||
|
||||
Reference in New Issue
Block a user