51 lines
1.5 KiB
TypeScript
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();
|
|
}, []);
|
|
}
|