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);
        }
    }
}

OAuth2UserOidcUser를 공통적으로 처리하기 위한 추상 클래스


CustomOAuth2UserService

OAuth2User 처리를 위한 클래스


CustomOidcUserService

OidcUser 처리를 위한 클래스


UserService

Last updated