diff --git a/app/onboarding/_components/LoginScreen.tsx b/app/onboarding/_components/LoginScreen.tsx index 6350d63..9dee187 100644 --- a/app/onboarding/_components/LoginScreen.tsx +++ b/app/onboarding/_components/LoginScreen.tsx @@ -16,7 +16,8 @@ interface LoginScreenProps { } export default function LoginScreen({ onNext }: LoginScreenProps) { - const [isLoading, setIsLoading] = useState(false); + const [isGoogleLoading, setIsGoogleLoading] = useState(false); + const [isKakaoLoading, setIsKakaoLoading] = useState(false); const { oauthState, setOauthState, @@ -62,7 +63,8 @@ export default function LoginScreen({ onNext }: LoginScreenProps) { if (error) { console.error("OAuth 인증 오류:", error); console.error("OAuth 로그인 실패"); - setIsLoading(false); + setIsGoogleLoading(false); + setIsKakaoLoading(false); return; } @@ -74,7 +76,8 @@ export default function LoginScreen({ onNext }: LoginScreenProps) { if (state && oauthState && state !== oauthState) { console.error("State 파라미터가 일치하지 않습니다."); console.error("OAuth state 파라미터 불일치"); - setIsLoading(false); + setIsGoogleLoading(false); + setIsKakaoLoading(false); return; } @@ -135,7 +138,7 @@ export default function LoginScreen({ onNext }: LoginScreenProps) { ]); const handleGoogleLogin = () => { - setIsLoading(true); + setIsGoogleLoading(true); // 현재 페이지 상태 저장 (인증 후 돌아올 때 사용) const currentStep = "login"; @@ -151,9 +154,19 @@ export default function LoginScreen({ onNext }: LoginScreenProps) { }; const handleKakaoLogin = () => { - // TODO: Implement Kakao login - login(); - onNext(); + setIsKakaoLoading(true); + + // 현재 페이지 상태 저장 (인증 후 돌아올 때 사용) + const currentStep = "login"; + setOauthReturnStep(currentStep); + + // CSRF 보호를 위한 state 파라미터 생성 + const state = Math.random().toString(36).substring(2, 15); + setOauthState(state); + + // Kakao OAuth 인증 페이지로 리다이렉트 + const redirect_uri = `${process.env.NEXT_PUBLIC_FRONTEND_BASE_URL}/onboarding`; + window.location.href = `${OAUTH_ENDPOINTS.KAKAO_AUTHORIZE}?redirect_uri=${redirect_uri}&state=${state}`; }; const handleBrowse = () => { @@ -212,27 +225,32 @@ export default function LoginScreen({ onNext }: LoginScreenProps) { {/* Google Login */} {/* Kakao Login */} diff --git a/lib/constants.ts b/lib/constants.ts index d7009ca..be45905 100644 --- a/lib/constants.ts +++ b/lib/constants.ts @@ -5,7 +5,9 @@ export const API_BASE_URL = "http://motimo.kro.kr:8080"; // OAuth 관련 상수 export const OAUTH_ENDPOINTS = { GOOGLE_AUTHORIZE: `${API_BASE_URL}/oauth2/authorize/google`, + KAKAO_AUTHORIZE: `${API_BASE_URL}/oauth2/authorize/kakao`, } as const; // 기타 상수 -export const FRONTEND_BASE_URL = "http://localhost:3000"; \ No newline at end of file +export const FRONTEND_BASE_URL = "http://localhost:3000"; +