회원탈퇴

탈퇴 또는 수정할 때 본인이 맞는지 비밀번호를 한번더 확인하는 과정 필요

view

input 태그의 disabled 속성 : 화면에 나타나지만 전송될 때는 제외시킴

remove.jsp

<!-- Forms -->
			<div class="row">
				<h4 class="center-align">회원탈퇴</h4>
				<hr style="margin-bottom: 50px;">

				<form id="frm" class="col s12 l6 offset-l3" action="/member/remove" method="post">
					<div class="row">
						<div class="input-field col s12">
							<i class="material-icons prefix">assignment_ind</i> <input type="text" value="${memberVO.id}" id="member_id" class="validate" **disabled**> <label for="member_id">아이디</label>
						</div>
					</div>
					<div class="row">
						<div class="input-field col s12">
							<i class="material-icons prefix">lock</i> <input type="password" name="passwd" id="password" class="validate"> <label for="password">비밀번호</label>
						</div>
					</div>

					<div class="row center-align">
						<button type="submit" class="btn waves-effect waves-light">
							탈퇴하기 <i class="material-icons right">directions_run</i>
						</button>
					</div>
				</form>
			</div>
			<!-- end of Forms -->

JavaScript 활용하기

// in remove.jsp

<script>
		var frm = document.querySelector('#frm');
		frm.addEventListener('submit', function(event) {
			// 기본동작이 있는 대표적인 태그 2개 : a 태그, form 태그
			event.preventDefault(); // 기본동작 막기

			var isRemove = confirm('정말 회원탈퇴 하시겠습니까?'); // yes - true, no - false

			if (!isRemove) { // isRemove == false
				return;
			}

			frm.submit(); // 액션 속성을 요청함
		});
	</script>

memberController.java

// 회원탈퇴
	@GetMapping("/member/remove")
	public String remove() {
		// 회원탈퇴 폼으로 보내버리기~.~
		// 클릭하자마자 삭제해줄 수도 있지만 보안상 한번더 거치기(본인확인)
		// 본인확인 -> 패스워드 입력
		return "member/remove";
	}

	@PostMapping("/member/remove")
	public ResponseEntity<String> remove(String passwd, HttpSession session) {
		MemberVO memberVO = (MemberVO) session.getAttribute("memberVO");
		boolean isSamePasswd = BCrypt.checkpw(passwd, memberVO.getPasswd());

		// 회원정보 불일치하는 경우
		if (!isSamePasswd) {

			HttpHeaders headers = new HttpHeaders();
			headers.add("Content-Type", "text/html; charset=utf-8"); // == setContentType

			String str = Script.back("패스워드가 일치하지 않습니다!");

			return new ResponseEntity<String>(str, headers, HttpStatus.OK);

		}

		// 회원탈퇴 (삭제) 처리
		memberService.removeMemberById(memberVO.getId()); // 테이블 레코드 삭제
		**session.invalidate(); // 세션도 날려야함**

		HttpHeaders headers = new HttpHeaders();
		headers.add("Content-Type", "text/html; charset=utf-8");

		String str = Script.href("회원탈퇴가 정상적으로 처리 되었습니다.", "/");

		return new ResponseEntity<String>(str, headers, HttpStatus.OK);
	}