본문 바로가기

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

소셜 계정으로 가입한 회원이 탈퇴를 하게 된다면,

자체적으로 탈퇴 처리만 해도 되지만, 그 후 연결을 끊어주는 방법도 있다.

연결을 끊어주지 않으면 해당 소셜 계정에 계속 뜰 것이다..

카카오톡 계정이 연결된 외부 서비스


https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#unlink

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com


액세스 토큰을 이용하는 것과, 어드민 키를 이용하는 두 가지 방법이 있다.

서비스 종료 등의 이유로 액세스 토큰을 이용하여 연결을 끊을 수 없는 경우가 있어서 어드민 키를 이용하는 방법을 지원한다고 한다.

하지만 내 프로젝트에서는 액세스 토큰을 써도 충분하다고 판단해서 액세스 토큰을 이용했다.


async disconnect() {

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

      const kakaoHeader = {
        headers: {
          'Authorization' : `Bearer ${accessToken}`,
          'btnType' : btnType
        }
      }

      if(btnType === 'kakao') {
        await axios.post(this.$store.state.url + 'disconnectKakao', {}, kakaoHeader)
      }

 

 'Authorization' : `Bearer ${accessToken}`,

필수로 넘겨줄 값은 헤더의 액세스 토큰이 전부! 


try {
            URI uri = new URI("https://kapi.kakao.com/v1/user/unlink");

            // 헤더 설정
            HttpHeaders headers = new HttpHeaders();
            headers.set("Authorization", authHeader);
            HttpEntity<String> entity = new HttpEntity<>("parameters", headers);

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

            if (response.getBody() != null) {
                rModel.setState(true);
                rModel.setMessage("카카오 연동 해제에 성공했습니다.");
                rModel.setResult(response.getBody());
            } 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하기 때문에 재가입 불가능..

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