오래 못 할 짓 하지 않기

[ Spring boot Security ] 5. 유저 정보 DB에 넣기 본문

혼자하기/연습 1) OAuth

[ Spring boot Security ] 5. 유저 정보 DB에 넣기

쫑알bot 2024. 3. 2. 21:58
728x90

우리는 들어오는 정보를 받아서 그 안에 담겨있는 유저를

 

String username = oAuth2Response.getProvider()+" "+oAuth2Response.getProviderId();

 

이런 형태로 받는다.

 

따라서 받을 때 저 username으로 저장되며, 그 username이 DB에 존재하는지 여부에 따라서

새로 들어오는 사람인지, 원래 있던 사람인지 판단한다.

 

그러기 위해서는 DB에 들어갈 유저 Entity와 Service단과 DB를 이어줄 UserRepository가 필요하다

 

 

 

 

 

이후 Service 단에서 해줄 것은 하나다.

 

DB에서 

String username = oAuth2Response.getProvider()+" "+oAuth2Response.getProviderId();

이 정보를 가져오고, 그게 Null ( 로그인 한 적이 없다면 ) 새로 추가

그게 존재한다면, 변경사항 ( 유저가 네이버나 구글에서 이름이나 이메일주소를 변경했을 경우 ) 을 업데이트 해준다.

 

 

그리고 그 정보가 담긴 DTO를 유저 로그인 하는 곳에 넘겨준다.

 

 

코드 ▼ 

더보기
        String username = oAuth2Response.getProvider()+" "+oAuth2Response.getProviderId();
        //이미 등록된 유저인지
        UserEntity existData = userRepository.findByUsername(username);

        if(existData == null){ //등록 X

            UserEntity userEntity = new UserEntity();

            userEntity.setUsername(username);
            userEntity.setEmail(oAuth2Response.getEmail());
            userEntity.setName(oAuth2Response.getName());
            userEntity.setRole("ROLE_USER");

            userRepository.save(userEntity);

            //이젠 DTO에 담아 로그인 진행 ( 위에서는 로그인 정보 DB에 저장 )
            UserDTO userDTO = new UserDTO();
            userDTO.setUsername(username);
            userDTO.setName(oAuth2Response.getName());
            userDTO.setRole("ROLE_USER");

            return new CustomOAuth2User(userDTO);

        }else{                  // 등록되어있음  -> Response로 넘어온 정보들로 다시 업데이트 시킴

            existData.setEmail(oAuth2Response.getEmail());
            existData.setName(oAuth2Response.getName());

            userRepository.save(existData);

            UserDTO userDTO = new UserDTO();
            userDTO.setUsername(oAuth2Response.getEmail());
            userDTO.setName(oAuth2Response.getName());
            userDTO.setRole(existData.getRole());

            return new CustomOAuth2User(userDTO);

        }