From 288b52d58a6611ce28ad405e2362b864327c664b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=84=9C=EC=A0=9C=EA=B2=BD?= Date: Fri, 27 Feb 2026 21:01:51 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EA=B0=80=EC=9E=85=EB=90=9C=20=EC=86=8C?= =?UTF-8?q?=EC=85=9C=20=EA=B3=84=EC=A0=95=20=EC=9E=88=EB=8A=94=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/auth/useEmailVerification.ts | 18 ++++++++++++++++++ src/types/auth/auth.ts | 2 ++ 2 files changed, 20 insertions(+) diff --git a/src/hooks/auth/useEmailVerification.ts b/src/hooks/auth/useEmailVerification.ts index 28cf67c..fe2aaf8 100644 --- a/src/hooks/auth/useEmailVerification.ts +++ b/src/hooks/auth/useEmailVerification.ts @@ -66,11 +66,29 @@ export const useEmailVerification = ({ stop(); }, [stop]); + const PROVIDER_NAME: Record = { + GOOGLE: "구글", + KAKAO: "카카오", + NAVER: "네이버", + }; + const sendVerificationEmail = (email: string, successMessage: string) => { activeSendCode.mutate( { email }, { onSuccess: (data) => { + const { isProviderLinked, providerTypes } = data.data; + + if (isProviderLinked) { + const providerNames = providerTypes + .map((type) => PROVIDER_NAME[type]) + .join(", "); + toast.error("이미 소셜 로그인으로 가입된 이메일입니다.", { + description: `${providerNames}계정으로 로그인해주세요`, + }); + return; + } + setSendCode(true); toast.success(successMessage); restart(data.data.expireIn); diff --git a/src/types/auth/auth.ts b/src/types/auth/auth.ts index 902524b..c3e18f9 100644 --- a/src/types/auth/auth.ts +++ b/src/types/auth/auth.ts @@ -6,6 +6,8 @@ export interface IEmailSendResponse { message: string; email: string; expireIn: number; + isProviderLinked: boolean; + providerTypes: TLoginProvider[]; } export interface IEmailVerifyRequest {