Hello

10. 구글 로그인 및 자동 회원가입 진행 완료

by 볼빵빵오춘기

PrinciplaDetails

private Map<String,Object> attributes;
// OAuth 로그인
public PrincipalDetails(User user,Map<String,Object> attributes){
    this.user = user;
    this.attributes = attributes;
}
@Override
public Map<String, Object> getAttributes() {
    return attributes;
}

@Override
public String getName() {
    return null;
}

 

PrincipalOauth2User

@Autowired
private UserRepository userRepository;
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
    System.out.println("loadUser() - getClientRegistration : "+userRequest.getClientRegistration()); // 어떤 OAuth로 로그인했는지 확인가능
    System.out.println("loadUser() - getAccessToken : "+userRequest.getAccessToken().getTokenValue());


    OAuth2User oAuth2User = super.loadUser(userRequest);
    // 구글 로그인 버튼 클릭 -> 구글 로그인 창 -> 로그인 완료 -> code를 리턴받음(OAuth-Client라이브러리) -> AccessToken 요청
    // => 여기까지가 userReequest 정보
    // userReequest 정보 -> loadUser함수을 통해 구글 회원프로필 받음
    System.out.println("loadUser() - getAttributes : "+super.loadUser(userRequest).getAttributes());
    System.out.println("loadUser() - getAttributes : "+oAuth2User.getAttributes()); // super.loadUser(userRequest).getAttributes() == oAuth2User.getAttributes()

    // 회원가입을 강제로 진행
    // String provider = userRequest.getClientRegistration().getClientId(); // google
            String provider = userRequest.getClientRegistration().getRegistrationId(); // google - 뒤에 강의에서 수정함.
    String providerId = oAuth2User.getAttribute("sub");
    String username = provider+"_"+providerId; //
//        String password = bCryptPasswordEncoder.encode("겟인데어");
    String email = oAuth2User.getAttribute("email");
    String role = "ROLE_USER";

    User userEntity = userRepository.findByUsername(username);

    // 이미 가입된 자인지 아닌지 확인
    if(userEntity==null){
		// User 생성자 추가 후 위에 코드를 완성시킬 예정
    }else{
        System.out.println("구글 로그인을 이미 한적이 있습니다. 당신은 자동회원가입이 되어 있습니다. ");
    }

    return new PrincipalDetails(userEntity,oAuth2User.getAttributes());

    // 회원가입을 강제로 진행해 볼 예정
    // return super.loadUser(userRequest);
}

 

User

생성자를 추가함으로써 디폴트 생성자가 필요하므로 @NoArgsConstructor 붙여준다.

@NoArgsConstructor
@Builder
public User(String username, String password, String email, String role, String provider, String providerId, Timestamp createDate) {
    this.id = id;
    this.username = username;
    this.password = password;
    this.email = email;
    this.role = role;
    this.provider = provider;
    this.providerId = providerId;
    this.createDate = createDate;
}

 

PrincipalOauth2User

// 이미 가입된 자인지 아닌지 확인
if(userEntity==null){
    System.out.println("구글 로그인 최초입니다.");
    userEntity = User.builder()
            .username(username)
            .password("")
            .email(email)
            .role(role)
            .provider(provider)
            .providerId(providerId)
            .build();
    userRepository.save(userEntity);
}else{

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기