Social Login - 코드 구현 - Service
AbstractOAuth2UserService
@Slf4j
@Service
@Getter
@RequiredArgsConstructor
public abstract class AbstractOAuth2UserService {
private final UserService userService;
private final UserRepository userRepository;
public ProviderUser providerUser(ClientRegistration clientRegistration, OAuth2User oAuth2User) {
String registrationId = clientRegistration.getRegistrationId();
switch (registrationId) {
case "keycloak" -> {
return new KeycloakUser(oAuth2User, clientRegistration);
}
case "google" -> {
return new GoogleUser(oAuth2User, clientRegistration);
}
case "naver" -> {
return new NaverUser(oAuth2User, clientRegistration);
}
}
return null;
}
protected void register(ProviderUser providerUser, OAuth2UserRequest userRequest) {
User user = userRepository.findByUsername(providerUser.getUsername());
if (user == null) {
String registrationId = userRequest.getClientRegistration().getRegistrationId();
userService.register(registrationId, providerUser);
} else {
log.info("user = {}", user);
}
}
}OAuth2User와 OidcUser를 공통적으로 처리하기 위한 추상 클래스
CustomOAuth2UserService
OAuth2User 처리를 위한 클래스
CustomOidcUserService
OidcUser 처리를 위한 클래스
UserService
Last updated