-
Notifications
You must be signed in to change notification settings - Fork 0
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
The head ref may contain hidden characters: "Feat/#41/\uC18C\uC15C-\uB85C\uADF8\uC778-\uCE74\uCE74\uC624-\uAD6C\uD604"
Conversation
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.
좋아요
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.
와우 테스트까지 해볼 수 있네요 좋아요!
TestController 부분은 후에 프론트와 API 연동 시에는 삭제되는 부분인 거 맞나욤?
// HTTP 요청 보내기 | ||
HttpEntity<MultiValueMap<String, String>> kakaoUserInfoRequest = new HttpEntity<>(headers); | ||
RestTemplate rt = new RestTemplate(); | ||
ResponseEntity<String> response = rt.exchange( |
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.
p3: RestTemplate을 통해서 서버 단에서 HTTP 요청을 보낼 수 있군요! 알아갑니다~
@@ -33,4 +32,11 @@ public User findUserByUserId(Long userId) { | |||
} | |||
return userByUserId; | |||
} | |||
|
|||
@Transactional | |||
public void validateEmail(String email) { |
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.
p3: 공통적으로 쓰이는 부분 따로 뺀 거 좋아요
넵 저희쪽에서 테스트해보기위해서 존재하는 코드이고, 프론트와 api 연동 후에는 사용되지않을 코드입니다! |
📝 요약
카카오 소셜 로그인 기능 구현한 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 진행 시 이러한 점들을 참고해 주세요