diff options
| -rw-r--r-- | app/api/auth/[...nextauth]/route.ts | 7 | ||||
| -rw-r--r-- | components/login/login-form.tsx | 21 |
2 files changed, 20 insertions, 8 deletions
diff --git a/app/api/auth/[...nextauth]/route.ts b/app/api/auth/[...nextauth]/route.ts index 3b0f8c61..d6ec807f 100644 --- a/app/api/auth/[...nextauth]/route.ts +++ b/app/api/auth/[...nextauth]/route.ts @@ -30,6 +30,7 @@ declare module "next-auth" { image?: string | null companyId?: number | null techCompanyId?: number | null + ownerCompanyId?: number | null domain?: string | null reAuthTime?: number | null authMethod?: AuthMethod @@ -44,6 +45,7 @@ declare module "next-auth" { imageUrl?: string | null companyId?: number | null techCompanyId?: number | null + ownerCompanyId?: number | null domain?: string | null reAuthTime?: number | null authMethod?: AuthMethod @@ -58,6 +60,7 @@ declare module "next-auth/jwt" { imageUrl?: string | null companyId?: number | null techCompanyId?: number | null + ownerCompanyId?: number | null domain?: string | null reAuthTime?: number | null authMethod?: AuthMethod @@ -315,6 +318,7 @@ export const authOptions: NextAuthOptions = { token.sessionExpiredAt = reAuthTime + sessionTimeoutMs token.dbSessionId = user.dbSessionId token.roles = user.roles + token.ownerCompanyId = user.ownerCompanyId } // ✅ 기존 토큰이 있고 로그인이 아닌 경우, DB에서 최신 사용자 정보 조회 @@ -333,6 +337,7 @@ export const authOptions: NextAuthOptions = { token.name = latestUser.name token.companyId = latestUser.companyId token.techCompanyId = latestUser.techCompanyId + token.ownerCompanyId = latestUser.ownerCompanyId // roles 정보도 최신으로 업데이트 const userRoles = await getUserRoles(parseInt(token.id)) @@ -358,6 +363,7 @@ export const authOptions: NextAuthOptions = { token.name = latestUser.name token.companyId = latestUser.companyId token.techCompanyId = latestUser.techCompanyId + token.ownerCompanyId = latestUser.ownerCompanyId token.roles = await getUserRoles(numericUserId) } @@ -430,6 +436,7 @@ export const authOptions: NextAuthOptions = { domain: token.domain as string, companyId: token.companyId as number, techCompanyId: token.techCompanyId as number, + ownerCompanyId: token.ownerCompanyId as number, image: token.imageUrl ?? null, reAuthTime: token.reAuthTime as number | null, authMethod: token.authMethod as AuthMethod, diff --git a/components/login/login-form.tsx b/components/login/login-form.tsx index 36687096..751e45f4 100644 --- a/components/login/login-form.tsx +++ b/components/login/login-form.tsx @@ -99,12 +99,12 @@ export function LoginForm() { useEffect(() => { if (status === 'authenticated' && session?.user) { const callbackUrlParam = searchParams?.get('callbackUrl'); - + if (callbackUrlParam) { try { // URL 객체로 파싱 const callbackUrl = new URL(callbackUrlParam); - + // pathname + search만 사용 (호스트 제거) const relativeUrl = callbackUrl.pathname + callbackUrl.search; router.push(relativeUrl); @@ -113,8 +113,13 @@ export function LoginForm() { router.push(callbackUrlParam); } } else { - // callbackUrl이 없으면 기본 대시보드로 리다이렉트 - router.push(`/${lng}/partners/dashboard`); + if (session.user.ownerCompanyId) { + router.push(`/${lng}/partners/data-room`); + + } else { + router.push(`/${lng}/partners/dashboard`); + + } } } }, [status, session, router, lng, searchParams]); @@ -130,7 +135,7 @@ export function LoginForm() { // 세분화된 에러 메시지 처리 함수 const getErrorMessage = (error: { errorCode?: string; message?: string }, provider: 'email' | 'sgips') => { const errorCode = error.errorCode; - + if (!errorCode) { return error.message || t('authenticationFailed'); } @@ -270,7 +275,7 @@ export function LoginForm() { const targetUserId = userIdParam || mfaUserId; const targetEmail = emailParam || mfaUserEmail; const targetUserName = userNameParam || mfaUserName; - + if (!targetUserId || mfaCountdown > 0) return; setIsSmsLoading(true); @@ -359,7 +364,7 @@ export function LoginForm() { } } else { let errorMessage = t('invalidAuthCode'); - + if (result?.error) { switch (result.error) { case 'CredentialsSignin': @@ -676,7 +681,7 @@ export function LoginForm() { setPassword(''); setUsername(''); } - + // S-Gips 관련 초기화 setSelectedOtpUser(null); setShowUserSelectionDialog(false); |
