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

볼빵빵오춘기

활동하기