-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[feature] 소셜 로그인 (애플 로그인 기능 추가) 및 에러 코드 리팩토링 #98
Conversation
try { | ||
User user = userService.login(request); | ||
|
||
// 로그인 성공 시 토큰 생성 | ||
String accessToken = jwtUtil.createAccessToken(request.getEmail()); | ||
String refreshToken = user.getRefreshToken(); | ||
return ApiResponse.onSuccess(UserConverter.toLoginResultDto(user, accessToken, refreshToken)); | ||
} catch (UserHandler e) { | ||
return ApiResponse.onFailure(e.getCode().getReason().getCode(), e.getMessage(), null); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수고하셨습니다 :)
토큰 유효성 검사는 마저 수정한 뒤 pr 올리겠습니다 !
논의 사항에 적어주신 email controller와 user controller api에서 각각 반환값이 동일하게 나오지 않는 이슈를 확인해보니, /email/send
와 같은 경우에는 에러가 전역적으로 처리되는 반면, /user/login
은 개별적으로 처리되는 것 같아요!
/email/send
은 ExceptionAdvice
에 있는 handleMethodArgumentNotValid
에 의해 처리되고 /user/login
은 UserController
에 있는
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ApiResponse<Map<String, String>>> handleValidationExceptions(MethodArgumentNotValidException ex) {
Map<String, String> errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
String combinedMessage = String.join(", ", errors.values());
return new ResponseEntity<>(ApiResponse.onFailure("400", combinedMessage, errors), HttpStatus.BAD_REQUEST);
}
해당 코드가 실행되어 개별적으로 처리되는 것 같습니다! 따라서 위의 @ExceptionHandler(MethodArgumentNotValidException.class)
로직을 주석처리 한 뒤 실행하면
전역적으로 처리되는 것 같습니다.
따라서
해당 코드 부분에 try catch문은 없어져도 될 것 같아요! 마찬가지로 /email/send
에서도
catch (UserHandler e) {
throw e;
}
위와 같은 UserHandler
는 아마 적용되고 있지 않는 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
헉 원인이 그거였군요! 덕분에 금방 해결했습니다. 리뷰 감사합니다:)
연관 이슈
close #96
개요
소셜 로그인 (애플 로그인 기능 추가) 및 에러 코드 리팩토링
✅ 작업 내용
카카오 로그인을 소셜 로그인으로 확장 (애플로그인 추가)
User 및 Email 관련 응답 ErrorStatus 처리
(*토큰 유효성 검사 관련해서는 앞에서 작업 중인 게 있는 것 같아 제외하고 작업했어요)
생년월일 유효성 검증 추가 (기존 형식만 검증 → 유효한 년도인지 검증)
이메일 검증 구체화 및 정규식 상수 분리
📝 논의사항
email 컨트롤러 API
는 저렇게 예쁘게 나오는데,user 컨트롤러 API
는 message랑 result가 중복돼서 나오더라구요.ExceptionAdvice
이거는 바꿔야 할 거 같은데 뭘 어떻게 바꿔야 할지 모르겠네요.FutureDateValidator
을 추가했습니다. 잘 동작하는데, 다만 위에처럼 응답값이 message랑 result가 중복되서 나오는게 좀 보기 싫어서...☹ 주석처리해두었어요. 근데 보다보니 validator의 문제라기보다는 exception 처리 시의 문제같긴 하더라구요?! 내용 공유차 말씀드립니다!