Skip to content

Commit 9c76dda

Browse files
authored
Merge pull request #343 from mosu-dev/develop
[배포] KMC 회원, 카카오 중복 회원가입 에러 처리
2 parents 7afc334 + f888537 commit 9c76dda

File tree

6 files changed

+57
-10
lines changed

6 files changed

+57
-10
lines changed

src/main/java/life/mosu/mosuserver/application/oauth/OAuthUserPersistenceProcessor.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import life.mosu.mosuserver.domain.user.entity.UserJpaEntity;
55
import life.mosu.mosuserver.domain.user.entity.UserRole;
66
import life.mosu.mosuserver.domain.user.repository.UserJpaRepository;
7+
import life.mosu.mosuserver.global.exception.OAuthException;
78
import life.mosu.mosuserver.global.processor.StepProcessor;
89
import life.mosu.mosuserver.global.util.PhoneNumberUtil;
910
import lombok.RequiredArgsConstructor;
@@ -28,9 +29,9 @@ public UserJpaEntity process(final OAuthUserInfo info) {
2829
return userRepository.findByPhoneNumber(
2930
PhoneNumberUtil.formatPhoneNumber(info.phoneNumber()))
3031
.map(existingUser -> {
31-
// if (existingUser.isMosuUser()) {
32-
// throw new IllegalArgumentException("이미 모수 회원입니다.");
33-
// }
32+
if (existingUser.isMosuUser()) {
33+
throw new OAuthException("DUPLICATE");
34+
}
3435
existingUser.updateOAuthUser(
3536
info.gender(),
3637
info.name(),
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package life.mosu.mosuserver.global.exception;
2+
3+
import org.springframework.security.core.AuthenticationException;
4+
5+
public class OAuthException extends AuthenticationException {
6+
7+
public OAuthException(String msg) {
8+
super(msg);
9+
}
10+
}

src/main/java/life/mosu/mosuserver/global/handler/OAuth2LoginFailureHandler.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import jakarta.servlet.http.HttpServletResponse;
77
import java.io.IOException;
88
import java.nio.charset.StandardCharsets;
9-
import life.mosu.mosuserver.presentation.auth.dto.request.LoginResponse;
109
import lombok.RequiredArgsConstructor;
1110
import lombok.extern.slf4j.Slf4j;
1211
import org.springframework.security.core.AuthenticationException;
@@ -27,8 +26,11 @@ public class OAuth2LoginFailureHandler implements
2726
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
2827
AuthenticationException exception) throws IOException, ServletException {
2928

30-
LoginResponse loginResponse = LoginResponse.from();
31-
String jsonResponse = UriUtils.encode(objectMapper.writeValueAsString(loginResponse),
29+
OAuthErrorType errorType = OAuthErrorType.from(exception.getMessage());
30+
OAuthFailureResponse oAuthFailureResponse = OAuthFailureResponse.from(
31+
errorType.getMessage());
32+
33+
String jsonResponse = UriUtils.encode(objectMapper.writeValueAsString(oAuthFailureResponse),
3234
StandardCharsets.UTF_8);
3335

3436
final String redirectWithAccessToken = UriComponentsBuilder.fromUriString(
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package life.mosu.mosuserver.global.handler;
2+
3+
import lombok.Getter;
4+
5+
@Getter
6+
public enum OAuthErrorType {
7+
CANCELED("CANCELED"),
8+
DUPLICATE("DUPLICATE"),
9+
UNKNOWN("UNKNOWN");
10+
11+
private final String message;
12+
13+
OAuthErrorType(String message) {
14+
this.message = message;
15+
}
16+
17+
public static OAuthErrorType from(String text) {
18+
if (text == null) {
19+
return UNKNOWN;
20+
}
21+
return switch (text) {
22+
case "DUPLICATE" -> DUPLICATE;
23+
case "[access_denied] User denied access" -> CANCELED;
24+
default -> UNKNOWN;
25+
};
26+
}
27+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package life.mosu.mosuserver.global.handler;
2+
3+
public record OAuthFailureResponse(
4+
Boolean isProfileRegistered,
5+
String errorCode
6+
) {
7+
8+
public static OAuthFailureResponse from(String errorCode) {
9+
return new OAuthFailureResponse(null, errorCode);
10+
}
11+
}

src/main/java/life/mosu/mosuserver/presentation/auth/dto/request/LoginResponse.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,4 @@ public static LoginResponse from(Boolean isProfileRegistered, final UserJpaEntit
2121
}
2222
return new LoginResponse(false, LoginUserResponse.from(user));
2323
}
24-
25-
public static LoginResponse from() {
26-
return new LoginResponse(null, null);
27-
}
2824
}

0 commit comments

Comments
 (0)