소셜 로그인, 회원가입 - 이메일 체크 로직 수정 #303
|
@ -62,7 +62,6 @@ interface MemberQueryRepository {
|
|||
|
||||
fun getMemberProfile(memberId: Long, myMemberId: Long): GetMemberProfileResponse
|
||||
|
||||
fun existsByEmail(email: String): Boolean
|
||||
fun existsByNickname(nickname: String): Boolean
|
||||
fun findNicknamesWithPrefix(prefix: String): List<String>
|
||||
}
|
||||
|
@ -486,14 +485,6 @@ class MemberQueryRepositoryImpl(
|
|||
.fetchFirst()
|
||||
}
|
||||
|
||||
override fun existsByEmail(email: String): Boolean {
|
||||
return queryFactory
|
||||
.selectOne()
|
||||
.from(member)
|
||||
.where(member.email.eq(email))
|
||||
.fetchFirst() != null
|
||||
}
|
||||
|
||||
override fun existsByNickname(nickname: String): Boolean {
|
||||
return queryFactory
|
||||
.selectOne()
|
||||
|
|
|
@ -286,11 +286,22 @@ class MemberService(
|
|||
isAdmin: Boolean = false,
|
||||
isCreator: Boolean = false
|
||||
): LoginResponse {
|
||||
val member = repository.findByEmail(email = email) ?: throw SodaException("로그인 정보를 확인해주세요.")
|
||||
val member = repository.findByEmail(email = email) ?: throw SodaException("없는 계정입니다.")
|
||||
|
||||
if (!member.isActive) {
|
||||
throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.")
|
||||
}
|
||||
|
||||
if (member.provider != MemberProvider.EMAIL) {
|
||||
val provider = when (member.provider) {
|
||||
MemberProvider.APPLE -> "애플"
|
||||
MemberProvider.GOOGLE -> "구글"
|
||||
else -> "카카오"
|
||||
}
|
||||
|
||||
throw SodaException("해당 이메일은 $provider 계정으로 가입되어 있습니다. 해당 소셜 로그인을 사용해 주세요.")
|
||||
}
|
||||
|
||||
if (isCreator && member.role != MemberRole.CREATOR) {
|
||||
throw SodaException("로그인 정보를 확인해주세요.")
|
||||
}
|
||||
|
@ -380,8 +391,23 @@ class MemberService(
|
|||
fun duplicateCheckEmail(email: String): ApiResponse<Any> {
|
||||
validateEmail(email)
|
||||
|
||||
if (repository.existsByEmail(email)) {
|
||||
val findMember = repository.findByEmail(email)
|
||||
|
||||
if (findMember != null) {
|
||||
if (findMember.provider == MemberProvider.EMAIL) {
|
||||
throw SodaException("이미 사용중인 이메일 입니다.", "email")
|
||||
} else {
|
||||
val provider = when (findMember.provider) {
|
||||
MemberProvider.APPLE -> "애플"
|
||||
MemberProvider.GOOGLE -> "구글"
|
||||
else -> "카카오"
|
||||
}
|
||||
|
||||
throw SodaException(
|
||||
"해당 이메일은 $provider 계정으로 이미 가입되어 있습니다. 해당 소셜 로그인을 사용해 주세요.",
|
||||
"email"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
return ApiResponse.ok(message = "사용 가능한 이메일 입니다.")
|
||||
|
@ -741,7 +767,14 @@ class MemberService(
|
|||
|
||||
@Transactional
|
||||
fun findOrRegister(googleUserInfo: GoogleUserInfo, container: String, marketingPid: String?): Member {
|
||||
repository.findByGoogleId(googleUserInfo.sub)?.let { return it }
|
||||
val findMember = repository.findByGoogleId(googleUserInfo.sub)
|
||||
if (findMember != null) {
|
||||
if (findMember.isActive) {
|
||||
return findMember
|
||||
} else {
|
||||
throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.")
|
||||
}
|
||||
}
|
||||
|
||||
val stipulationTermsOfService = stipulationRepository.findByIdOrNull(StipulationIds.TERMS_OF_SERVICE_ID)
|
||||
?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
|
||||
|
@ -749,10 +782,13 @@ class MemberService(
|
|||
val stipulationPrivacyPolicy = stipulationRepository.findByIdOrNull(StipulationIds.PRIVACY_POLICY_ID)
|
||||
?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
|
||||
|
||||
val email = googleUserInfo.email
|
||||
checkEmail(email)
|
||||
|
||||
val nickname = nicknameGenerateService.generateUniqueNickname()
|
||||
val member = Member(
|
||||
googleId = googleUserInfo.sub,
|
||||
email = googleUserInfo.email,
|
||||
email = email,
|
||||
password = "",
|
||||
nickname = nickname,
|
||||
profileImage = "profile/default-profile.png",
|
||||
|
@ -774,7 +810,14 @@ class MemberService(
|
|||
|
||||
@Transactional
|
||||
fun findOrRegister(kakaoUserInfo: KakaoUserInfo, container: String, marketingPid: String?): Member {
|
||||
repository.findByKakaoId(kakaoUserInfo.id)?.let { return it }
|
||||
val findMember = repository.findByKakaoId(kakaoUserInfo.id)
|
||||
if (findMember != null) {
|
||||
if (findMember.isActive) {
|
||||
return findMember
|
||||
} else {
|
||||
throw SodaException("탈퇴한 계정입니다.\n고객센터로 문의해 주시기 바랍니다.")
|
||||
}
|
||||
}
|
||||
|
||||
val stipulationTermsOfService = stipulationRepository.findByIdOrNull(StipulationIds.TERMS_OF_SERVICE_ID)
|
||||
?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
|
||||
|
@ -782,10 +825,13 @@ class MemberService(
|
|||
val stipulationPrivacyPolicy = stipulationRepository.findByIdOrNull(StipulationIds.PRIVACY_POLICY_ID)
|
||||
?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
|
||||
|
||||
val email = kakaoUserInfo.email
|
||||
checkEmail(email)
|
||||
|
||||
val nickname = nicknameGenerateService.generateUniqueNickname()
|
||||
val member = Member(
|
||||
kakaoId = kakaoUserInfo.id,
|
||||
email = kakaoUserInfo.email,
|
||||
email = email,
|
||||
password = "",
|
||||
nickname = nickname,
|
||||
profileImage = "profile/default-profile.png",
|
||||
|
@ -804,4 +850,18 @@ class MemberService(
|
|||
|
||||
return member
|
||||
}
|
||||
|
||||
private fun checkEmail(email: String) {
|
||||
val member = repository.findByEmail(email)
|
||||
|
||||
if (member != null) {
|
||||
val provider = when (member.provider) {
|
||||
MemberProvider.APPLE -> "애플"
|
||||
MemberProvider.GOOGLE -> "구글"
|
||||
else -> "카카오"
|
||||
}
|
||||
|
||||
throw SodaException("해당 이메일은 $provider 계정으로 가입되어 있습니다. 해당 소셜 로그인을 사용해 주세요.")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue