본문 바로가기

서버/SprintBoot
[스프링부트(Spring Boot)] 소셜 로그인 로그아웃(네이버 로그아웃)

네이버는 별도로 로그아웃 api 를 제공하고 있지는 않다.

대신 access token을 삭제하는 방식으로 로그아웃 처리를 했다.

토큰 삭제는 발급과 매개변수만 다르고 방식은 동일하다.

참고로 이렇게 하면 회원 탈퇴와 같은 로직이기 때문에 연동이 해제되는 것이다.

DB 처리가 다르기 때문에 운영 상에는 차이가 난다.


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


access_token을 삭제하려면 기존의 access token을 매개변수로 전달해야 하기 때문에 가져올 필요가 있다.

naverLogoutParams: {
        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',
      },
  1. client_id: 네이버에서 발급 받은 client id
  2. client_secret: 네이버에서 발급 받은 cliend secret pw
  3. grant_type: 'delete' 로 고정
  4. access_token: 발급 받은 access_token
  5. service_provider: 'naver' 로 고정

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


서버로 post 요청을 보낸다.

로그인할 때와 마찬가지로 클라이언트 측에서는 처리가 안 된다.

엄연히 말하자면 proxy 설정을 해주면 되지만, 서버에서 처리하라고 해둔 것을 굳이 그렇게까지 할 이유가 없어서 서버에서 처리했다.


로그아웃 후 로그인 화면.

필수 동의까지 처음부터 받고 싶었던 건 아니지만, 계정 변경 등을 위해 로그아웃 시 이러한 처리를 할 수밖에 없었다.

내가 기획한 사이트의 로그인 로그아웃 기능에선 이게 최선.

최초 로그인처럼 보이지만 아이디를 인식하기 때문에 회원가입으로 넘어가지 않고 기존 회원 로그인이 가능하다.