Skip to content

Commit

Permalink
issue #222 내용 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
philos1234 committed Nov 14, 2022
1 parent d8174df commit b1c113c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,10 @@ public interface UserRepository extends JpaRepository<User,Long> {

Optional<User> findByEmail(String email);


Optional<User> findByName(String name);


boolean existsByEmail(String email);
boolean existsByName(String name);


}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import java.util.Collections;
import java.util.Map;
import java.util.Optional;

@RequiredArgsConstructor
@Service
Expand Down Expand Up @@ -46,7 +47,7 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic

UserProfile userProfile = OAuthAttributes.extract(registrationId, attributes); // registrationId에 따라 유저 정보를 통해 공통된 UserProfile 객체로 만들어 줌


oAuthUserValidationCheck(userProfile);
User user = saveOrUpdate(userProfile); // DB에 저장


Expand All @@ -58,10 +59,27 @@ public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2Authentic

}

private User saveOrUpdate(UserProfile userProfile) {
if(userRepository.existsByEmail(userProfile.getEmail())) {
throw new OAuth2AuthenticationException(String.valueOf(ResponseTemplateStatus.EMAIL_DUPLICATE.getMessage()));
/**
* OAuth 로그인 유저 로그인 로직 유효성 검사
*
* 1. 처음 oauth로 로그인 한 경우 -> 정상적으로 User db에 저장
* 2. 두번째 로그인한 경우 -> 정상적으로 로그인
* 3. 처음 로그인하는데 동일한 이메일을 갖고있는 유저가 이미 있는 경우 -> exception 발생
*
* oauth 아이디와 email이 같은 경우 동일한 oauth 로그인 유저로 판단
*
*
*/
private void oAuthUserValidationCheck(UserProfile userProfile){
if(userRepository.existsByEmail(userProfile.getEmail())){
User user = userRepository.findByEmail(userProfile.getEmail()).get();
if(Optional.of(user.getOauthId()).equals(userProfile.getOauthId()) == false)
throw new OAuth2AuthenticationException(String.valueOf(ResponseTemplateStatus.EMAIL_DUPLICATE.getMessage()));

}

}
private User saveOrUpdate(UserProfile userProfile) {
User user = userRepository.findByOauthId(userProfile.getOauthId())
.map(m-> m.update(userProfile.getEmail()))
.orElse(userProfile.toUser());
Expand Down

0 comments on commit b1c113c

Please sign in to comment.