안녕하세요? MelonPeach입니다.
오늘은 회원탈퇴 기능에대해 포스팅하겠습니다.
1. memberMapper.xml 작성
회원탈퇴를 하기위해선 사용자의 USERID와 USERPASS가 맞아야겠지요.
사진과 같이 쿼리를 만들어줍니다.
<!-- 회원탈퇴 -->
<delete id="memberDelete">
DELETE FROM MP_MEMBER
WHERE USERID = #{userId}
AND USERPASS = #{userPass}
</delete>
2. MemberDAO 작성
memberMapper.memberDelete로 파라미터를 보내줍니다.
// 회원 탈퇴
public void memberDelete(MemberVO vo)throws Exception;
// 업데이트와 마찬가지로 흐름은 같습니다.
@Override
public void memberDelete(MemberVO vo) throws Exception {
// MemberVO에 담긴 값들을 보내줍니다.
// 그럼 xml에서 memberMapper.memberDelete에 보시면
// #{userId}, #{userPass}에 파라미터값이 매칭이 되겠지요.
sql.delete("memberMapper.memberDelete", vo);
}
3. MemberService작성
MemberService에서 MemberDAO로 파라미터들을 보내줍니다.
public void memberDelete(MemberVO vo) throws Exception;
// 업데이트에서 처리한 내용과 같습니다.
@Override
public void memberDelete(MemberVO vo) throws Exception {
dao.memberDelete(vo);
}
4. MemberController작성
memberDelete에서 session에 담겨있는 member을 사용하여 세션에있는 비밀번호와 vo로 담기는 비밀번호를
비교하여 일치하면 회원을 탈퇴시키고 일치하지 않으면 msg에 false값을 넣어 memberDeleteView로 보내줍니다.
// 회원 탈퇴 get
@RequestMapping(value="/memberDeleteView", method = RequestMethod.GET)
public String memberDeleteView() throws Exception{
return "member/memberDeleteView";
}
// 회원 탈퇴 post
@RequestMapping(value="/memberDelete", method = RequestMethod.POST)
public String memberDelete(MemberVO vo, HttpSession session, RedirectAttributes rttr) throws Exception{
// 세션에 있는 member를 가져와 member변수에 넣어줍니다.
MemberVO member = (MemberVO) session.getAttribute("member");
// 세션에있는 비밀번호
String sessionPass = member.getUserPass();
// vo로 들어오는 비밀번호
String voPass = vo.getUserPass();
if(!(sessionPass.equals(voPass))) {
rttr.addFlashAttribute("msg", false);
return "redirect:/member/memberDeleteView";
}
service.memberDelete(vo);
session.invalidate();
return "redirect:/";
}
5. memberDeleteView작성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
<!-- 합쳐지고 최소화된 최신 CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<!-- 부가적인 테마 -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<title>회원탈퇴</title>
</head>
<script type="text/javascript">
$(document).ready(function(){
// 취소
$(".cencle").on("click", function(){
location.href = "/";
})
$("#submit").on("click", function(){
if($("#userPass").val()==""){
alert("비밀번호를 입력해주세요.");
$("#userPass").focus();
return false;
}
});
})
</script>
<body>
<section id="container">
<form action="/member/memberDelete" method="post">
<div class="form-group has-feedback">
<label class="control-label" for="userId">아이디</label>
<input class="form-control" type="text" id="userId" name="userId" value="${member.userId}" readonly="readonly"/>
</div>
<div class="form-group has-feedback">
<label class="control-label" for="userPass">패스워드</label>
<input class="form-control" type="password" id="userPass" name="userPass" />
</div>
<div class="form-group has-feedback">
<label class="control-label" for="userName">성명</label>
<input class="form-control" type="text" id="userName" name="userName" value="${member.userName}" readonly="readonly"/>
</div>
<div class="form-group has-feedback">
<button class="btn btn-success" type="submit" id="submit">회원탈퇴</button>
<button class="cencle btn btn-danger" type="button">취소</button>
</div>
</form>
<div>
<c:if test="${msg == false}">
비밀번호가 맞지 않습니다.
</c:if>
</div>
</section>
</body>
</html>
6. 실행 테스트
비밀번호가 맞지 않았을때 비밀번호가 맞지 않습니다 라는 글이 생깁니다.
비밀번호가 맞으면 로그인페이지로 넘어가지며 세션이 끊기게됩니다.
이상으로 회원탈퇴기능을 마치며 다음 포스팅에서는
로그인했을 때 아이디가 중복되는지에 대한 검증 기능을 포스팅하겠습니다.