UserEntity

UserRepository

OAuth2UserService

        // 로그인 완료했을 때 작업
        String username = oAuth2Response.getProvider() + " " + oAuth2Response.getProviderId();

        UserDto userDto = new UserDto();
        userDto.setName(oAuth2User.getName());
        userDto.setUsername(username);
        userDto.setRole("ROLE_USER");

        return new CustomOAuth2User(userDto);

를 변경해서 유저 정보 저장할 로직 작성할 것임

  1. DB에 접근하기 위해 UserRepository 주입
    private final UserRepository userRepository;

    public CustomOAuth2UserService(UserRepository userRepository){
        this.userRepository = userRepository;
    }
  1. loadUser 메소드 수정
        // 로그인 완료했을 때 작업
        String username = oAuth2Response.getProvider() + " " + oAuth2Response.getProviderId();

        UserEntity existData = userRepository.findByUsername(username);

        // 한번도 로그인 한 적이 없는 경우 -> 데이터를 만들어서 넣어줘야함
        if(existData == null){
            System.out.println("저장해야해");
            UserEntity userEntity = new UserEntity();
            userEntity.setRole("ROLE_USER");
            userEntity.setUsername(username);
            userEntity.setName(oAuth2Response.getName());
            userEntity.setEmail(oAuth2Response.getEmail());

            userRepository.save(userEntity);

            UserDto userDto = new UserDto();
            userDto.setName(oAuth2User.getName());
            userDto.setUsername(username);
            userDto.setRole("ROLE_USER");

            return new CustomOAuth2User(userDto);
        }
        else {

						// 소셜에서의 회원정보가 변경되었을 수 있기 때문에 로그인할 때 업데이트 해주기
            existData.setEmail(oAuth2Response.getEmail());
            existData.setName(oAuth2User.getName());

            UserDto userDto = new UserDto();
            userDto.setName(oAuth2Response.getName());
            userDto.setUsername(username);
            userDto.setRole("ROLE_USER");

            return new CustomOAuth2User(userDto);
        }