[회원관리] 회원탈퇴

2023. 1. 21. 18:44프로젝트/라이프 챌린지

728x90
SMALL

로그아웃 구현이 완료가 되었으니 이제 회원탈퇴 기능을 구현해보자 회원탈퇴 기능 비교적 간단하다.

로그아웃은 토큰만 지워주면 끝이였으나 회원탈퇴 기능은 추가로 member 계정도 같이 삭제해주면 끝난다.

 


MemberController

// 회원탈퇴
@DeleteMapping("/unregister")
public ResponseEntity<ResponseBody> memberUnregister(HttpServletRequest request){
    log.info("회원탈퇴 - 탈퇴 토큰 : {}", request.getHeader("Authorization"));

    return memberService.memberUnregister(request);
}

 

삭제되는 처리만 필요하므로 PostMapping이 아닌 DeleteMapping으로 메소드를 생성해준다.

Request를 Service 단에 넘겨준다.

 

 

 

MemberService

// 회원탈퇴
@Transactional
public ResponseEntity<ResponseBody> memberUnregister(HttpServletRequest request){

    // request 에서 액세스토큰 정보 추출
    String refreshToken = request.getHeader("Refresh-Token");

    // 리프레시 토큰 유효성 검사
    if(!jwtTokenProvider.validateToken(refreshToken)){
        return new ResponseEntity<>(new ResponseBody(StatusCode.USELESS_TOKEN.getStatusCode(), StatusCode.USELESS_TOKEN.getStatus(), null), HttpStatus.BAD_REQUEST);
    }

    // Authentication 유효성 검사
    if(jwtTokenProvider.getMemberFromAuthentication() == null){
        return new ResponseEntity(new ResponseBody(StatusCode.NOT_EXIST_ACCOUNT.getStatusCode(), StatusCode.NOT_EXIST_ACCOUNT.getStatus(), null), HttpStatus.BAD_REQUEST);
    }

    Member unregister_member = jwtTokenProvider.getMemberFromAuthentication();

    // 회원탈퇴할 계정의 토큰 삭제
    queryFactory
            .delete(token)
            .where(token.refreshToken.eq(refreshToken))
            .execute();

    // 회원탈퇴할 계정 삭제
    queryFactory
            .delete(member)
            .where(member.member_id.eq(unregister_member.getMember_id()))
            .execute();

    return new ResponseEntity<>(new ResponseBody(StatusCode.OK.getStatusCode(), StatusCode.OK.getStatus(), "정상적으로 탈퇴되셨습니다. 이용해주셔서 감사합니다."), HttpStatus.OK);
}

회원탈퇴가 진행될 로직을 만들어준다.

  • 로그아웃과 마찬가지로 request.getHeader("Refresh-Token")을 통해 리프레시 토큰을 불러온 다음, validateToken() 과 getMemberFromAuthentication() 메소드를 통하여 토큰 및 Authentication 객체 유효성 검증을 한다.
  • 검증이 통과가 되었다면 getMemberFromAuthentication() 메소드를 통해 출력된 Member 객체를 받아온다.
  • 회원탈퇴하고자 하는 계정의 토큰과 member 객체를 삭제 처리해준다.
  • 무사히 삭제처리가 완료되었다면 "정상적으로 탈퇴되셨습니다. 이용해주셔서 감사합니다." 문구가 나올 것이다.

 

 

포스트맨으로 회원탈퇴가 정상적으로 수행되었는지 확인해보자.

 

/lc/unregister 주소로 액세스 토큰과 리프레시 토큰을 헤더에 포함하여 Delete 요청을 보냈더니 정상적으로 결과 문구가 출력되는 것을 확인하였다.

728x90
반응형
LIST

'프로젝트 > 라이프 챌린지' 카테고리의 다른 글

[게시판] 게시글 수정  (0) 2023.01.25
[게시판] 게시글 작성  (0) 2023.01.25
[회원관리] 로그아웃  (0) 2023.01.21
[회원관리] 로그인  (0) 2023.01.20
[회원관리] 회원가입  (0) 2023.01.17