diff --git a/app/auth/callback/route.ts b/app/auth/callback/route.ts index 27401f8..718a862 100644 --- a/app/auth/callback/route.ts +++ b/app/auth/callback/route.ts @@ -6,21 +6,23 @@ export async function GET(request: Request) { const code = searchParams.get('code'); const next = searchParams.get('next') ?? '/mypage'; + // 프로덕션 기준 URL 결정 + // 우선순위: NEXT_PUBLIC_SITE_URL > x-forwarded-host > origin + const siteUrl = process.env.NEXT_PUBLIC_SITE_URL; + const forwardedHost = request.headers.get('x-forwarded-host'); + const baseUrl = + siteUrl ?? + (process.env.NODE_ENV !== 'development' && forwardedHost + ? `https://${forwardedHost}` + : origin); + if (code) { const supabase = await createClient(); const { error } = await supabase.auth.exchangeCodeForSession(code); if (!error) { - const forwardedHost = request.headers.get('x-forwarded-host'); - const isLocalEnv = process.env.NODE_ENV === 'development'; - if (isLocalEnv) { - return NextResponse.redirect(`${origin}${next}`); - } else if (forwardedHost) { - return NextResponse.redirect(`https://${forwardedHost}${next}`); - } else { - return NextResponse.redirect(`${origin}${next}`); - } + return NextResponse.redirect(`${baseUrl}${next}`); } } - return NextResponse.redirect(`${origin}/login?error=auth-callback-error`); + return NextResponse.redirect(`${baseUrl}/login?error=auth-callback-error`); } diff --git a/app/login/page.tsx b/app/login/page.tsx index 7f1b9da..477c90c 100644 --- a/app/login/page.tsx +++ b/app/login/page.tsx @@ -60,9 +60,11 @@ function LoginForm() { }; const handleGoogleLogin = async () => { + // NEXT_PUBLIC_SITE_URL 이 설정되어 있으면 우선 사용 (localhost 리다이렉트 방지) + const base = process.env.NEXT_PUBLIC_SITE_URL ?? window.location.origin; const { error } = await supabase.auth.signInWithOAuth({ provider: 'google', - options: { redirectTo: `${window.location.origin}/auth/callback` }, + options: { redirectTo: `${base}/auth/callback` }, }); if (error) setMessage('Google 로그인 오류: ' + error.message); };