[Kakao Login] 카카오 로그인 구현하기 - 로그아웃

leeng·2023년 3월 30일
0

kakaoLogin

목록 보기
3/3

Step 3: 사용자 로그인 처리

4. 로그아웃

아래는 로그아웃 처리를 하는 메소드인데, 마찬가지로 session을 이용한다는 가정 하에 작성한 로직이기 때문에 현재는 session과 JSESSIONID 쿠키를 지워주는 방식으로 로그아웃하고 있다.

JWT 인증 방식으로 바꾸게 되면 JWT 토큰을 만료시키는 방식으로 로그아웃도 수정할 예정이다.

일단 중요한 건 카카오 로그인 api를 이용한 로그아웃이니 카카오 로그아웃 로직 위주로 살펴보자.
로그아웃 코드 중간 쯤에 위치한 이 부분이 카카오 로그아웃 로직이다.

로그아웃 요청 시에는 Authorization 헤더에 access token을 넣어서 요청하면 된다.

요청 후 응답이 HTTP_OK 상태로 오면, 로그아웃된 사용자의 id를 받게 된다.
만약 에러가 발생한 경우에는 'code'와 'msg'를 키로 하는 JSON 에러 메세지를 받게 된다.

    private Long kakaoLogout(String access_token) throws IOException {
        validateToken(access_token);

        Long loggedOutId = null;
        HttpURLConnection connection = getConnection(KakaoApiConstants.URLs.LOGOUT_URL, "POST", false);
        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        connection.setRequestProperty("Authorization", "Bearer " + access_token+"aa");

        int responseCode = connection.getResponseCode();

        if (responseCode == HttpURLConnection.HTTP_OK) {
            String result = getResultString(connection.getInputStream());

            JsonParser jsonParser = new JacksonJsonParser();
            Map<String, Object> map = jsonParser.parseMap(result);
            loggedOutId = (Long) map.get("id");

        } else { // responseCode not HTTP_OK
            String result = getResultString(connection.getErrorStream());

            JsonParser jsonParser = new JacksonJsonParser();
            Map<String, Object> map = jsonParser.parseMap(result);
            int code = (int) map.get("code");
            String msg = (String) map.get("msg");
            log.info("error code : {}, msg : {} ", code, msg);

            throw new RuntimeException(msg);
        }

        return loggedOutId;
    }

마무리

로그아웃을 끝으로 카카오 로그인 과정을 구현하는 방법에 대해서 정리해보았다. 사실 기능 구현 자체는 크게 어렵지 않았지만 에러 처리를 어떻게 해야할지에 대한 고민이 컸던 것 같다. 다시 정리하다보니 그 부분이 여전히 아쉬운 점으로 남는다. 토큰이 만료된 경우에 refreshToken으로 다시 토큰을 발급받는 로직도 추가로 작성해야할 것 같다.
다만 처음부터 완벽히 프로그램을 짜려고 하면 시간도 너무 많이 소요되고 사실상 완벽한 프로그램이란 불가능에 가까운 것이기 때문에.. 일단 나중으로 미뤄놓고 JWT와 Spring security, OAuth2 적용 후 다시 손을 보도록 해야겠다.

profile
기술블로그보다는 기록블로그

0개의 댓글