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

Feat #20 카카오 로그인 로직 변경 #21

Merged
merged 23 commits into from
Jan 8, 2025

Conversation

koreaioi
Copy link
Member

@koreaioi koreaioi commented Jan 8, 2025

📌 관련 이슈

관련 이슈 번호 #
Close #

🚀 작업 내용

PR에서 작업한 내용을 설명
카카오 로그인, 최초 회원가입 로직이 변경되어 반영

  • 프론트 측에서 인가코드 받도록 로직 수정
  • 로그인 or 최초 회원가입 여부 반환
  • 최초 회원가입 일 때, 임시 유저 만들고 반환 + 임시 토큰 발급
  • 회원가입 진행 중 중단된 엣지 케이스 -> 다시 회원가입 진행 시 임시 토큰 재발급
  • 인가 경로 오류 수정

임시유저

임시 유저를 위해 ACTIVE와 INACTIVE 상태를 가지는 UserStatus를 추가했습니다.
임시 유저의 email 필드는 DB에 Null로 저장합니다.
대신 임시 유저 토큰을 만드는 과정에는 더미 이메일을 넣도록 했습니다.!

엣지 케이스 방지

해당 엣지 케이스는 optionalMember가 비어있는 지 확인하고
2차적으로 role이 TEMPORARY인 지 확인합니다.

        Optional<Members> optionalMember = memberService.findByKakaoId(kakaoId);

       if(optionalMember.get().getRole() == TEMPORARY){
            TmpMemberDto tmpDto = TmpMemberDto.of(optionalMember.get());
            jwtService.responseTmpAccessToken(tmpDto, response);
            return oauthMapper.toKakaoUnRegisterResponse(tmpDto.userId());
        }

📸 스크린샷

프론트 측에서 인가코드 받도록 로직 수정

백엔드 테스트
프론트는 url에서 code 부분을 파싱하여 백엔드에 전달
image

Response Body에 authCode로 저장 후 백엔드에 전달

image

임시 토큰 또한 발급 됩니다
image

엣지 케이스

회원가입 진행 중 중단된 엣지 케이스
다른 authcode를 사용하여 토큰, 사용자 정보를 가져온 뒤,
TEMPORARY인 유저 발견 시 임시토큰을 발급하고 다시 회원가입을 진행하도록 한다.

image

📢 리뷰 요구사항

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성
로직 상 문제가 있는 지 봐주시면 감사하겠습니다!
빠른 구현을 위해 코드 개선적인 부분은 리뷰에 주신다면 다음 개선 이슈 때 반영하도록 하겠습니다.

@koreaioi koreaioi added the ✨ Feature 기능 개발 및 요구사항 변경 반영 label Jan 8, 2025
@koreaioi koreaioi self-assigned this Jan 8, 2025
@koreaioi koreaioi linked an issue Jan 8, 2025 that may be closed by this pull request
4 tasks
Copy link
Member

@hyxklee hyxklee left a comment

Choose a reason for hiding this comment

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

고생하셨어요!
로직에는 문제 없어 보이는데 수정하면 좋아 보이는 것들 달아 뒀습니다!

return Members.builder()
.kakaoId(kakaoId)
.email(TMP_EMAIL)
.role(Role.TEMPORARY)
Copy link
Member

Choose a reason for hiding this comment

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

role은 차후에 admin, user를 구분할 때 쓰여야할 것 같은데, status나 deletedAt을 사용하는 것은 어떨까요?

기본 유저 객체 생성시 @PrePersist로 status를 UNACTIVE로 설정하거나, 아니면 소프트 딜리트가 적용된 상태를 기본 상태로 두고
회원가입이 완료되면 status를 바꾸거나, 소프트 딜리트 된것을 해제하는 식으로요!

이렇게 전역적으로 관리를 해두면 차후 로직에서 user를 조회해올 때 ACTIVE인 유저만 조회하기, 혹은 삭제되지 않은 유저만 조회하기 등으로 일관성있는 개발이 가능할 것 같아요!

Copy link
Collaborator

Choose a reason for hiding this comment

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

저도 status로 관리하면 좋을 것 같습니다!!
저희가 메일 인증, 전화번호 인증 두 가지 인증이 있으니까 EMAIL_PENDING, PHONE_PENDING... 등의 상태를 만들어서 관리하면 좋을 것 같아요!!

Copy link
Member Author

@koreaioi koreaioi Jan 8, 2025

Choose a reason for hiding this comment

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

ACTIVE와 INACTIVE인 UserStatus를 만들도록 하겠습니다!
소프트 딜리트는 좀 더 공부해보도록 하겠습니다!

Copy link
Member Author

Choose a reason for hiding this comment

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

UserStatus는 회원가입 여부 (활성화 상태)만 나타내는 게 좋을거 같아요!
이미 유저 엔티티에 2차 인증 필드가 전화번호 인증을 나타내고 있기 때문에요!

@Column(name = "email", nullable = false, unique = true)
// UserDetails를 만드는 과정에서 null 방지를 위해 임시로 저장하는 이메일
// 추후 로직 개선하겠습니다.
private final static String TMP_EMAIL = "[email protected]";
Copy link
Member

Choose a reason for hiding this comment

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

그냥 null로 저장이 되면 될 것 같은데, 차후에 개선 부탁드릴게요!

Copy link
Member

Choose a reason for hiding this comment

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

저도 저희는 로직상 이메일 인증 로직이 따로 되어있고, 이메일 인증 로직시 입력받는 가천 이메일의 정보로 유저를 식별 가능하니까,
실제 이메일이 입력되기 전까지는 해당 이메일 필드를 null로 저장하는 것이 더 적합해보이긴합니다

Copy link
Member Author

Choose a reason for hiding this comment

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

실제 DB에서 임시 유저의 Email은 null로 저장하고
토큰을 만들기 위해서는 더미 이메일을 넣어주도록 수정했습니다!

Copy link
Member

@huncozyboy huncozyboy left a comment

Choose a reason for hiding this comment

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

고생하셨습니다 !!
전체적인 플로우에는 문제가 없어보이긴하는데, 임시 토큰이 아닌 토큰 재발급 시 기존 임시 토큰의 관리 부분이나 임시 토큰이 여러 번 발급될 때, 이전 토큰의 관리 등이 중요할거같습니다

Copy link
Collaborator

@soyesenna soyesenna left a comment

Choose a reason for hiding this comment

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

고생하셨습니다!!

@huncozyboy
Copy link
Member

고생하셨습니다 문제 없어보여요 !

@koreaioi koreaioi merged commit 405435f into dev Jan 8, 2025
2 checks passed
hyxklee added a commit that referenced this pull request Jan 9, 2025
Feat #21 Presigned Url 반환 API 구현 및 스웨거 설정 추가
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ Feature 기능 개발 및 요구사항 변경 반영
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feat] #19 카카오 로그인 로직 변경
4 participants