[회원관리] 회원탈퇴
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 |