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{
'강의 따라하기 > Security1' 카테고리의 다른 글
12. 네이버 로그인 완료 (0) | 2024.07.11 |
---|---|
11. 페이스북 로그인 완료 (0) | 2024.03.20 |
9. Authentication객체가 가질수 있는 2가지 타입 (0) | 2024.02.27 |
8. 구글 회원 프로필 정보 받아보기 (0) | 2024.02.27 |
7. 구글 로그인 준비 (1) | 2024.02.27 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기