유튜브에서 스프링시큐리티를 심화교육하면서 조금더 레벨업 하고자 한다.
IDE : IntelliJ
언어 : Java 8
스프링부트 버전 : 2.7.13
DB : MySQL
빌드관리 도구 : Maven
OS : iOS
참고유튜브 : 메타코딩
OAuth로 로그인을 했을 때 구글에서 받는 정보가 아닌 특수한 정보가 필요한 경우가 있다.
예를 들어 배송을 해야하는데 주소가 필요할 수도 있고, 포인트같은 건 구글에서 받아올수 있는 정보가 아니기 때문에
해당 유저도 db에 저장을 해줘야 한다.
PrincipalOauth2UserService로 이동해서 비밀번호 암호화를 위한 BCryptPasswordEncoder와 유저 정보 저장을 위한 UserRepository를 Autwired 한다.
loadUser 함수에 다음과 같이 작성한다.
provider -> google, facebook, kakao 등 정보를 제공한 사이트
providerId -> 고유아이디
username -> 회원아이디
password -> 특정비밀번호로 통일
email -> 정보제공사이트에서 받은 email 그대로 사용
role -> 권한 user로 통일
String provider = userRequest.getClientRegistration().getRegistrationId();
String providerId = oAuth2User.getAttribute("sub");
String username = provider+"_"+providerId;
String password = bCryptPasswordEncoder.encode("1111");
String email = oAuth2User.getAttribute("email");
String role = "ROLE_USER";
그 후 User 모델객체로 이동해 id를 제외한 생성자를 추가해준다. ( mac : cmd+n / window ctrl+insert)
생성자를 생성하고 위에 @Builder 어노테이션을 추가해준다.
이어서 기본생성자를 만들어주기 위해 @NoArgsConstructor 어노테이션을 추가해준다,
다시 PrincipalOauth2UserService로 이동해서 해당 사용자가 OAuth로 처음 로그인을 했을 때 db에서 username으로 회원을 검색해보고 만약 처음 로그인한 회원이라면 자동으로 회원가입을 하게 if문을 사용해서 작성해준다.
User userEntity = userRepository.findByUsername(username);
if (userEntity==null){
userEntity = User.builder()
.username(username)
.password(password)
.email(email)
.role(role)
.provider(provider)
.providerId(providerId)
.build();
userRepository.save(userEntity);
}
return new PrincipalDetails(userEntity,oAuth2User.getAttributes());
테스트를 위해서 IndexController에 user 메서드에서 콘솔에 유저 정보를 출력해본다.
에러가 발생해서 알려준대로 appliction.yml에 allow-circular-references를 true로 변경해준다.
main:
allow-circular-references: true
일반회원과 구글로 각각 로그인해서 /user로 접근을 시도해보면 유저의 정보를 잘 출력하는 것을 확인할 수 있다.
db에서 확인해보면 OAuth로 로그인해서 가입을 하지 않은 유저도 자동가입이 된것을 확인할 수 있다.
'프로젝트 > SpringSecurity' 카테고리의 다른 글
[Spring Security] 9. OAuth 네이버로그인 (0) | 2023.07.07 |
---|---|
[Spring Security] 8. OAuth 페이스북로그인 (0) | 2023.07.06 |
[Spring Security] 6. OAuth 구글로그인(3) (0) | 2023.07.05 |
[Spring Security] 5. OAuth 구글로그인(2) (0) | 2023.07.04 |
[Spring Security] 4. OAuth 구글로그인(1) (0) | 2023.07.04 |
댓글