Files
frontend/apps/sn/app/page.tsx
T

51 lines
1.5 KiB
TypeScript

/**
* ➡️ 경로 : 루트 (/)
*
* 📄 Home Page
* 홈 페이지 컴포넌트
*
* - 쿠키 기반 인증 토큰 검증 및 자동 로그인 처리
* - 로그인 성공 시 지도 페이지로 리다이렉트
* - 개발 환경에서는 루트 진입 시 자동 로그인 후 지도 페이지 이동
* - 로그인 실패 시 에러 로깅 및 처리
* - 사용자 세션 관리 및 초기 라우팅 제어
* - Next.js useRouter를 통한 클라이언트 사이드 라우팅
*
* 🔗 사용 API
* - 로그인: POST /api/v1/auth/login (user-service)
*/
"use client";
import { LoginApi } from "@/entities/auth";
import { useEffect } from "react";
const DEV_HOSTNAMES = new Set(["localhost", "127.0.0.1", "con.mind-one.co.kr"]);
const DEV_LOGIN_PAYLOAD = {
userId: process.env.NEXT_PUBLIC_DEV_LOGIN_USER_ID || "CLEANWATER",
password: process.env.NEXT_PUBLIC_DEV_LOGIN_PASSWORD || "gktneh12!@",
};
export default function Home() {
useEffect(() => {
const hostname = window.location.hostname;
const isDevHost = DEV_HOSTNAMES.has(hostname);
if (!isDevHost) {
window.location.replace("/map");
return;
}
async function doLogin() {
try {
// 개발 환경에서는 남아 있는 만료/부분 쿠키로 인한 /map <-> / 루프를 막기 위해 항상 토큰을 재발급한다.
await LoginApi.login(DEV_LOGIN_PAYLOAD);
window.location.replace("/map");
} catch (err) {
console.error("로그인 실패", err);
}
}
void doLogin();
}, []);
}