summaryrefslogtreecommitdiff
path: root/components/login/login-form-shi.tsx
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-08-25 07:21:43 +0000
committerjoonhoekim <26rote@gmail.com>2025-08-25 07:21:43 +0000
commit780d56edd3772813b4e557061a3c90d9f7d1ddd0 (patch)
tree71d2526637ac89811fe3e1b4e7e2b280dc2457cd /components/login/login-form-shi.tsx
parentfe924e1581fff24a91d65b33313bd3f39499bd72 (diff)
(김준회) 로그인 페이지 자동 리다이렉트 (이미 로그인한 경우) 및 시스템 설정 스타일 오류 수정, 로딩 애니메이션 컴포넌트 추가
Diffstat (limited to 'components/login/login-form-shi.tsx')
-rw-r--r--components/login/login-form-shi.tsx32
1 files changed, 31 insertions, 1 deletions
diff --git a/components/login/login-form-shi.tsx b/components/login/login-form-shi.tsx
index 862f9f8a..1a554cbc 100644
--- a/components/login/login-form-shi.tsx
+++ b/components/login/login-form-shi.tsx
@@ -15,13 +15,14 @@ import {
InputOTPGroup,
InputOTPSlot,
} from "@/components/ui/input-otp"
-import { signIn } from 'next-auth/react';
+import { signIn, useSession } from 'next-auth/react';
import { sendOtpAction } from "@/lib/users/send-otp";
import { verifyTokenAction } from "@/lib/users/verifyToken";
import { buttonVariants } from "@/components/ui/button"
import Link from "next/link"
import Image from 'next/image'; // 추가: Image 컴포넌트 import
import { KnoxSSOButton } from './saml-login-button'; // SAML 로그인 버튼 import
+import Loading from "../common/loading/loading";
export function LoginFormSHI({
className,
@@ -39,6 +40,7 @@ export function LoginFormSHI({
const { t, i18n } = useTranslation(lng, 'login');
const { toast } = useToast();
+ const { data: session, status } = useSession();
const handleChangeLanguage = (lang: string) => {
const segments = pathname.split('/');
@@ -181,6 +183,34 @@ export function LoginFormSHI({
verifyToken();
}, [token, toast, t]);
+ // 이미 로그인된 사용자 리다이렉트 처리
+ useEffect(() => {
+ if (status === 'authenticated' && session?.user) {
+ const callbackUrlParam = searchParams?.get('callbackUrl');
+
+ if (callbackUrlParam) {
+ try {
+ const callbackUrl = new URL(callbackUrlParam);
+ const relativeUrl = callbackUrl.pathname + callbackUrl.search;
+ router.push(relativeUrl);
+ } catch {
+ router.push(callbackUrlParam);
+ }
+ } else {
+ router.push(`/${lng}/evcp/report`);
+ }
+ }
+ }, [status, session, router, lng, searchParams]);
+
+ // 세션 로딩 중이거나 이미 인증된 상태에서는 로딩 표시
+ if (status === 'loading') {
+ return <Loading message={t('loading')} />;
+ }
+
+ if (status === 'authenticated' && session?.user) {
+ return <Loading message={t('redirecting')} />;
+ }
+
return (
<div className="container relative flex h-screen flex-col items-center justify-center md:grid lg:max-w-none lg:grid-cols-2 lg:px-0">
{/* Left Content */}