Skip to content
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

로그인 관련 코드 리팩토링 및 사용자 전환 플로우 수정에 따른 로직 추가 #691

Merged
merged 21 commits into from
Oct 22, 2024

Conversation

Mingyum-Kim
Copy link
Contributor

@Mingyum-Kim Mingyum-Kim commented Oct 20, 2024

PR의 목적이 무엇인가요?

  • 로그인 코드가 기능을 추가하기 복잡한 형태로 되어있어 리팩토링하였습니다.
  • 사용자 전환 플로우가 카카오 -> 구글, 애플에서 구글, 애플 -> 카카오로 변경됨에 따라 추가적인 로직을 구현하였습니다.

이슈 ID는 무엇인가요?

설명

구글, 애플로 로그인한 후 기존 카카오 인증 API로 데이터 이전 요청을 보냅니다.
서버에서는 카카오 통신 후 사용자의 identifier를 얻습니다.
그 다음 카카오 회원 데이터를 구글, 애플 회원 데이터로 갈아끼웁니다.
이 경우 같은 구글, 애플 회원이 두 행 존재하게 되므로 기존 구글, 애플 데이터는 삭제합니다.

이 과정을 통해 기존 카카오 회원을 구글, 애플 회원으로 이전하도록 합니다.

질문 혹은 공유 사항 (Optional)

  • 로그인 API 엔드포인트 수정에 따라 애플 redirect_uri 도 수정하였습니다.
  • 테스트 로그인 관련 컨트롤러를 별도의 클래스로 분리하였습니다.
  • OauthClient는 미사용 중인 부분도 있으나 구현이 복잡한 만큼 로그인 기능이 정착된 후 제거하는 게 좋을 것 같아 남겨두었습니다.

<질문>

애플 로그인시 user가 전달되지 않고 (=최초 로그인이 아닌 경우) 회원 DB에도 없는 경우에 예외를 던지는 게 맞을까요?
지금 dev에서 한 번이라도 애플 로그인한 회원은 prod에서 애플 로그인 시 무조건 로그인이 실패하는데, 엣지 케이스를 어떻게 대응해야할 지 모르겠습니다. 이름이 없어도 대충 저장하고 따로 찾아가서 수정하는 게 좋을까요? 😅

@Mingyum-Kim Mingyum-Kim added BE 백엔드 관련 이슈입니다. ⚒️ 리팩터링 refactor (기능이 변경되지는 않지만 코드를 수정) labels Oct 20, 2024
@Mingyum-Kim Mingyum-Kim self-assigned this Oct 20, 2024
Copy link
Contributor

@ay-eonii ay-eonii left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다 안나~~!

코멘트 몇 개 있는데 사소해서 approve 할게요~~

return ResponseEntity.ok().body(new RestResponse<>(response));
@PostMapping("/apple")
public ResponseEntity<Void> loginAppleOauth(
@RequestParam("id_token") String id_token,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@RequestParam에 따로 지정해줘서 변수명은 카멜케이스 사용해도 될 것 같아요

}
String accessToken = appleAuthService.login(id_token);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Location", "https://dev.mouda.site/oauth/apple?token=" + accessToken);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

항상 dev 로 보내나용?

private final MemberWriter memberWriter;

public Member join(String name, OauthType oauthType, String identifier) {
if (OauthType.KAKAO.equals(oauthType)) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

사소하지만 다른 부분에서는 enum 비교 시 ==를 사용하고 있는데, 통일하는 건 어떤가요?

@@ -19,36 +19,19 @@ public interface AuthSwagger {
@ApiResponses({
@ApiResponse(responseCode = "200", description = "로그인 성공!"),
})
ResponseEntity<RestResponse<LoginResponse>> loginKakaoOauth(@RequestBody OauthRequest oauthRequest);
ResponseEntity<Void> convert(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

바뀐 기능에 따라 swagger description 도 변경해주시면 좋을 것 같아여!~

@ay-eonii
Copy link
Contributor

애플 로그인시 user가 전달되지 않고 (=최초 로그인이 아닌 경우) 회원 DB에도 없는 경우에 예외를 던지는 게 맞을까요?
지금 dev에서 한 번이라도 애플 로그인한 회원은 prod에서 애플 로그인 시 무조건 로그인이 실패하는데, 엣지 케이스를 어떻게 대응해야할 지 모르겠습니다. 이름이 없어도 대충 저장하고 따로 찾아가서 수정하는 게 좋을까요? 😅

개인적으로는 예외를 던지는 게 낫지 않나 생각해요. 테스트하느라 prod에서 로그인을 못하는 건 슬프지만(ㅠㅠ) 그건 모우다팀 + 우테코 소수 인원으로 한정될 것이고 데이터를 직접 조작할 수 있는 범위이지 않을까요? 실제 저희 서비스에서는 실명이 중요한 요소인만큼 대충 저장하기엔 위험요소가 있지 않나 싶네요!

Copy link
Contributor

@ksk0605 ksk0605 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

작업을 반대로 돌리시느라 고생하셨을 것 같네요..ㅠ
질문 남겨주신것은 만나서 한번 이야기 해봅시다!

Comment on lines +16 to +37
@Service
@RequiredArgsConstructor
public class TestAuthService {

private final MemberFinder memberFinder;
private final MemberWriter memberWriter;
private final AccessTokenProvider accessTokenProvider;

public LoginResponse basicLoginAnna() {
Member member = memberFinder.findByIdentifier("identifier");
return new LoginResponse(accessTokenProvider.provide(member));
}

public LoginResponse basicLoginHogee() {
Member member = Member.builder()
.name("조호연")
.loginDetail(new LoginDetail(OauthType.GOOGLE, UUID.randomUUID().toString()))
.build();
memberWriter.append(member);
return new LoginResponse(accessTokenProvider.provide(member));
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

스프링의 profile을 잘 설정하면 prod 용 배포에서 이 클래스를 뺄 수 있겠네요!

APPLE_USER_BAD_REQUEST("잘못된 애플 로그인 요청입니다.");
KAKAO_CANNOT_JOIN("기존 카카오 로그인 이력이 있는 사용자만 이용할 수 있는 서비스입니다. 새로운 회원은 다른 로그인 서비스를 이용해주세요."),
APPLE_USER_BAD_REQUEST("사용자의 이름을 가져오는 과정에서 오류가 발생하였습니다."),
CANNOT_FIND_APPLE_MEMBER("애플 로그인 이력이 있지만 회원 정보를 조회할 수 없습니다.");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이게 그 이슈인가보네요 ㅋ큐ㅠ
말씀해주신 건은 월요일에 만나서 이야기 나눠보시죠!

Copy link
Contributor

@hoyeonyy hoyeonyy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생했습니다 안나~

애플 user 없을 때 현재는 예외를 던지는데 어떻게 해야할지 고민좀 해봅시바.

@hoyeonyy hoyeonyy merged commit 67fc50b into develop-backend Oct 22, 2024
1 check passed
@ay-eonii ay-eonii deleted the refactor/#690 branch October 24, 2024 07:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 관련 이슈입니다. ⚒️ 리팩터링 refactor (기능이 변경되지는 않지만 코드를 수정)
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants