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/#41/소셜 로그인 카카오 구현 #42

Merged
merged 12 commits into from
Jul 26, 2024

Conversation

seongjunnoh
Copy link
Collaborator

📝 요약

카카오 소셜 로그인 기능 구현한 api 입니다
카카오 서버로부터 email, nickname 정보를 얻어와 db에 저장(회원가입) 하고, jwt를 발급해 응답 헤더에 넣어줍니다(로그인)
카카오 서버에서 받은 email 정보가 db에 이미 존재하면, jwt 만 발급해줌 -> 로그인 과정만 수행함

이슈 번호 : #41

🔖 변경 사항

서비스 자체 회원가입/로그인 기능과 소셜 로그인 기능에서의 user 계정 관리의 혼동을 막고자, User 엔티티에 유저가 어떤 방식으로 회원가입을 했는지를 구분할 수 있는(자체, kakao, naver, google 등등) signupType 필드를 추가하였습니다
그리고 소셜 로그인 기능이 추가됨에 따라, 기존의 자체 회원가입 코드 중 이메일의 중복 검사를 하는 코드를 수정하였습니다
-> 이메일이 더 이상 unique 한 속성이 아닐 수 있으므로, signupType 으로 자체 회원가입을 통해 가입한 유저들 중 이메일의 중복이 있는지를 검사하도록 로직을 수정하였습니다

✅ 리뷰 요구사항

현재 한명의 유저가 자체 회원가입을 이용해 회원가입을 하고, 소셜 로그인을 통해 회원가입을 할 경우 (심지어 이메일 정보가 같더라도), 서로 다른 계정, 즉 서로 다른 유저로 취급합니다.
이메일 정보가 같을 경우에 한해서 이 두 계정을 하나로 합치는 방법을 생각해 봤으나, 현재 자체 회원가입 시 입력받는 이메일 주소가 검증된 값이 아니므로 서로 다른 유저를 하나의 계정으로 묶어버리는 상황이 발생할 수 있습니다
따라서 일단 서로 다른 방법으로 회원가입하면 모두 다른 계정으로 취급하는 식으로 코드를 작성했는데, 혹시 다른 의견 있으시면 편하게 리뷰 남겨주시면 감사하겠습니다

📸 확인 방법 (선택)

웹 브라우저에 localhost:8080/oauth/kakao url로 접속하고 인가 코드 발급을 위한 동의를 하면, 카카오 로그인에 성공했다는 json string 정보가 나옵니다.
이러면 회원가입&로그인 과정이 완료된 것이고, ide의 콘솔창에 log로 찍힌 jwt를 가지고 기존 api 요청을 보내면 다 문제없이 작동하는 것을 확인할 수 있습니다
여러번 요청을 보내면 보낼때마다 발급되는 jwt의 값이 달라집니다(로그인 할때마다 jwt를 발급해주므로)



📌 PR 진행 시 이러한 점들을 참고해 주세요

* P1 : 꼭 반영해 주세요 (Request Changes) - 이슈가 발생하거나 취약점이 발견되는 케이스 등
* P2 : 반영을 적극적으로 고려해 주시면 좋을 것 같아요 (Comment)
* P3 : 이런 방법도 있을 것 같아요~ 등의 사소한 의견입니다 (Chore)

@seongjunnoh seongjunnoh linked an issue Jul 25, 2024 that may be closed by this pull request
3 tasks
Copy link
Collaborator

@drbug2000 drbug2000 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
Member

@hyunn522 hyunn522 left a comment

Choose a reason for hiding this comment

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

와우 테스트까지 해볼 수 있네요 좋아요!
TestController 부분은 후에 프론트와 API 연동 시에는 삭제되는 부분인 거 맞나욤?

// HTTP 요청 보내기
HttpEntity<MultiValueMap<String, String>> kakaoUserInfoRequest = new HttpEntity<>(headers);
RestTemplate rt = new RestTemplate();
ResponseEntity<String> response = rt.exchange(
Copy link
Member

Choose a reason for hiding this comment

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

p3: RestTemplate을 통해서 서버 단에서 HTTP 요청을 보낼 수 있군요! 알아갑니다~

@@ -33,4 +32,11 @@ public User findUserByUserId(Long userId) {
}
return userByUserId;
}

@Transactional
public void validateEmail(String email) {
Copy link
Member

Choose a reason for hiding this comment

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

p3: 공통적으로 쓰이는 부분 따로 뺀 거 좋아요

@seongjunnoh
Copy link
Collaborator Author

와우 테스트까지 해볼 수 있네요 좋아요! TestController 부분은 후에 프론트와 API 연동 시에는 삭제되는 부분인 거 맞나욤?

넵 저희쪽에서 테스트해보기위해서 존재하는 코드이고, 프론트와 api 연동 후에는 사용되지않을 코드입니다!

@seongjunnoh seongjunnoh merged commit 368d9fb into develop Jul 26, 2024
3 checks passed
@hyunn522 hyunn522 deleted the Feat/#41/소셜-로그인-카카오-구현 branch July 30, 2024 12:27
seongjunnoh added a commit that referenced this pull request Oct 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

소셜 로그인 (카카오) 구현
3 participants