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
볼빵빵오춘기활동하기
Hello 춘기's world볼빵빵오춘기 님의 블로그입니다.