본문 바로가기

서버/SprintBoot
[스프링부트(Spring Boot)] 소셜 로그인 회원탈퇴(네이버 회원탈퇴)

회원 탈퇴 시 네이버와의 계정 연동을 해제하는 기능을 구현해보았다.

로그아웃과 동일!

연결된 서비스에서 사라지게 만드는 것이 목표!

개발 가이드에 아주 친절하게 잘 나와 있다.

https://developers.naver.com/docs/login/devguide/devguide.md#5-3-1-%EB%84%A4%EC%9D%B4%EB%B2%84-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%97%B0%EB%8F%99-%ED%95%B4%EC%A0%9C%EA%B0%80-%ED%95%84%EC%9A%94%ED%95%9C-%EA%B2%BD%EC%9A%B0

 

네이버 로그인 개발가이드 - LOGIN

네이버 로그인 개발가이드 1. 개요 4,200만 네이버 회원을 여러분의 사용자로! 네이버 회원이라면, 여러분의 사이트를 간편하게 이용할 수 있습니다. 전 국민 모두가 가지고 있는 네이버 아이디

developers.naver.com


카카오는 헤더만 넘겼는데, 네이버는 요청 변수(data)만 넘기면 된다.

 const accessToken = JSON.parse(atob(sessionStorage.getItem('access_token')));
      const btnType = sessionStorage.getItem('socialType');

      else if(btnType === 'naver') {
        this.naverDisconnectParams.access_token = accessToken;
        await axios.post(this.$store.state.url+'disconnectNaver', new URLSearchParams(this.naverDisconnectParams).toString())
      }


매개변수는 아래와 같다.

naverDisconnectParams: {
        client_id: process.env.VUE_APP_NAVER_CLIENT_ID,
        client_secret: process.env.VUE_APP_NAVER_CLIENT_SECRET_ID,
        grant_type: 'delete',
        access_token: '',
        service_provider: 'NAVER'
      },


위에 링크해둔 네이버 공식 문서에는 service_provider: 'NAVER' 부분이 빠져 있다.

토큰 삭제 부분에는 제대로 나와 있는데, 연동 해제에는 나와 있지 않다.

그렇지만 응답에 오류로 service_provider가 없다고 구체적으로 제시해 주어서 쉽게 해결할 수 있었다.

try {
            URI uri = new URI("https://nid.naver.com/oauth2.0/token?"+params);

            ResponseEntity<Object> response = restTemplate.exchange(uri, HttpMethod.POST, null, Object.class);

            if (response != null) {
                rModel.setState(true);
                rModel.setMessage("네이버 연동 해제에 성공했습니다.");
                rModel.setResult(response);
            } else {
                rModel.setState(false);
                rModel.setMessage("네이버 연동 해제 응답을 받지 못했습니다.");
            }
        } catch (URISyntaxException e) {
            rModel.setState(false);
            rModel.setMessage("잘못된 URI 형식입니다.");
        } catch (Exception e) {
            rModel.setState(false);
            rModel.setMessage("네이버 연동 해제 중 오류가 발생했습니다: " + e.getMessage());
        }

 

사라졌다 ㅎ.ㅎ

****************
소셜 계정에서 부여되는 아이디는 고유 값이기 떄문에 db에서 아예 날리지 않으면재가입이 불가능하다.

나같은 경우, 회원 탈퇴 시 계정을 db에서 삭제하는 것이 아니라 delete 날짜 컬럼을 update하기 때문에 재가입 불가능..

소셜 로그인 시 검증 로직을 추가해 주어야 한다.