Completed 401 UNAUTHORIZED 관련 질문입니다

문의 시, 사용하시는 개발환경과 디벨로퍼스 앱ID를 알려주세요.


디벨로퍼스 앱ID : 1130499
accessToken 활용

//service 코드

 public void withdraw(String accessToken, Long userId) {
        // 1. Kakao API를 통해 연결 끊기 요청
        String url = "https://kapi.kakao.com/v1/user/unlink";

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        headers.set("Authorization", "Bearer " + accessToken);

        HttpEntity<String> entity = new HttpEntity<>(headers);

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

        if (response.getStatusCode() == HttpStatus.OK) {
            System.out.println("Kakao 연결 끊기 성공");

            // 2. 연결 끊기 성공 후 데이터베이스에서 사용자 정보 삭제
            Optional<User> optionalUser = userRepository.findByUserId(userId);
            if (optionalUser.isPresent()) {
                User user = optionalUser.get();
                userRepository.delete(user);
                refreshTokenRepository.deleteByUser_UserId(user.getUserId());
                System.out.println("회원탈퇴 성공");
            } else {
                System.out.println("사용자를 찾을 수 없습니다.");
            }
        } else {
            throw new RuntimeException("Kakao 연결 끊기 실패: " + response.getStatusCode());
        }
    }
//controller 코드

@PostMapping("/withdraw")
    public ResponseEntity<String> withdraw(HttpServletRequest request) {
        String userIdHeader = request.getHeader("userId");
        String bearerToken = request.getHeader("Authorization");

        if (bearerToken != null && bearerToken.startsWith("Bearer ")) {
            String accessToken = bearerToken.substring(7); // "Bearer " 부분 제거

            if (userIdHeader != null) {
                Long userId = Long.valueOf(userIdHeader);
                userService.withdraw(accessToken, userId); // Kakao 회원탈퇴 처리

                return ResponseEntity.ok("회원탈퇴가 완료되었습니다.");
            } else {
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("유저 ID가 필요합니다.");
            }
        } else {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("유효한 토큰이 필요합니다.");
        }
    }

카카오와 유저의 연결을 끊고 → 연결이 끊겼다면 해당 유저의 정보를 db에서 삭제하는 방식으로 회원탈퇴를 진행하고자 합니다. 로그아웃도 위와 비슷한 로직으로 구현했는데 그건 잘 작동하는데 저 코드를 돌리면 401 오류가 발생하는데 왜 저 오류가 발생하는지 도무지 모르겠습니다,

안녕하세요.

401 오류 발생할 때, 접근 토큰이 아닌 JWT가 전달되고 있습니다.
추가로, 접근토큰을 이용한 방식은 해당 토큰이 만료된 경우 동일하게 401 오류가 발생 합니다.
따라서 사용자의 회원번호를 알고 있는 경우 어드민 키 방식을 통해 연결끊기 하는 것을 추천 드립니다.

admin으로 수정해서 시도 중입니다.

해당 연결끊기를 한번 시도하니

spring:
jpa:
hibernate:
ddl-auto: create

으로 해도 db에 생성된 유저가 삭제 되질 않네요…!

안녕하세요.

db의 데이터 삭제는 직접 구현하시는 부분으로 카카오에서 관여하는 부분이 아닙니다.