From 5c31ba73404915a6c116fbfaf5d68417b31cea42 Mon Sep 17 00:00:00 2001 From: Rafi Arrafif Date: Sat, 13 Sep 2025 16:15:01 +0700 Subject: [PATCH] :necktie: (necktie) add safeguard for duplicate email case Create a safeguard so that when a user enters an email address that has already been used with another OAuth provider, it will be rejected to avoid double entries. --- .../services/internal/OAuthUserProvision.service.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/modules/auth/services/internal/OAuthUserProvision.service.ts b/src/modules/auth/services/internal/OAuthUserProvision.service.ts index 3449571..4aa65ad 100644 --- a/src/modules/auth/services/internal/OAuthUserProvision.service.ts +++ b/src/modules/auth/services/internal/OAuthUserProvision.service.ts @@ -5,6 +5,7 @@ import { createUserSessionService } from "../../../userSession/services/createUs import { ErrorForwarder } from "../../../../helpers/error/instances/forwarder"; import { createUserViaOauth } from "../../../user/user.types"; import { createUserService } from "../../../user/services/internal/createUser.service"; +import { AppError } from "../../../../helpers/error/instances/app"; export const OAuthUserProvisionService = async ( payload: createUserViaOauth, @@ -21,6 +22,15 @@ export const OAuthUserProvisionService = async ( if (findUserResult) { return await createUserSessionService(findUserResult.id, userHeaderInfo); } else { + const findUserByEmailOnly = await findUserService({ + identifier: payload.email, + queryTarget: "email", + options: { verbosity: "exist" }, + }); + + if (findUserByEmailOnly) + throw new AppError(409, "Email already in use with another account"); + const createdUser = await createUserService(payload); return await createUserSessionService(createdUser.id, userHeaderInfo); }