[DDORI'S HOUSE] 회원정보 수정, 회원탈퇴, 아이디 찾기 구현하기

일시

2021.01.02 ~ 2022.01.03



프로젝트 개요

  • 주제 : 유기견 입양 및 후원 사이트

  • 프로젝트명(사이트명) & 팀명 : DDORI'S HOUSE

  • 구현 내용(목표) : 로그인/회원가입, 마이페이지(사용자), 마이페이지(관리자), 각종 게시판(공지사항, 강아지 리스트, 자유게시판, 입양후기 등), 쇼핑몰(물건 판매, 결제 시스템), 매칭 시스템(질문에 대한 답변을 통해 적절한 유형 매칭)

  • 네비게이션 구성 : about(각종 소개 및 공지사항), adopt(강아지 리스트, 강아지 매칭), donation(후원 안내, 물건 판매), volunteer(봉사 안내 게시판), community(입양후기, 자유게시판), contact(오시는길, 연락 등), login/join(로그인, 회원가입, 마이페이지 등)

  • 맡은 역할 : DB 관리(모델링 및 테이블, 컬럼 등), 네비게이션바, login/join, Mypage



람쥐의 진행현황 2탄!!!

★ Mypage
1) 마이페이지 jsp 만들기

★ login/join
1) 회원정보 수정 jsp 만들기
2) DB연동하여 업데이트한 회원정보 출력 확인
3) 회원탈퇴 버튼 만들기
4) DB연동하여 딜리트한 회원정보 출력 확인 (※탈퇴시 모든 게시물 삭제 추가로 21.01.23 최종구현완료)
5) 아이디 찾기 구현


구현화면

★Mypage

1) 마이페이지 jsp 만들기



★login/join

1) 회원정보 수정 jsp 만들기

2) DB연동하여 업데이트한 회원정보 출력 확인



updateForm.jsp 띄울 UserController.java 추가

      //★★ 회원정보수정 창 띄우기
     @RequestMapping(value="/user/updateForm", method=RequestMethod.GET)
     public String updateForm(ModelMap model, HttpServletRequest request, HttpServletResponse response)
     {
        String cookieUserId = CookieUtil.getHexValue(request, AUTH_COOKIE_NAME);
        
        User user = userService.userSelect(cookieUserId); //유저객체에 현재 갖고있는 유저정보를 읽어왔어요
        
        model.addAttribute("user", user); // 나는 "user"라는 jsp에서 사용할 이름을 쓸거야, 메소드에 정의되어있는 user라는 객체를
        
        return "/user/updateForm";
     }


회원정보 수정 할 update문 xml 추가

<update id="userUpdate" parameterType="com.icia.web.model.User">
UPDATE TBL_USER
   SET USER_PWD = #{userPwd},
       USER_NAME = #{userName},
       USER_EMAIL = #{userEmail},
       REG_DATE = SYSDATE,
       USER_ADDRESS = #{userAddress},
       USER_PNUM = #{userPNum},
       USER_B_DATE = #{userBDate},
       USER_NNAME = #{userNName}
 WHERE USER_ID = #{userId}
 </update>


회원정보 수정 할 update문 dao 추가

public int userUpdate(User user);


회원정보 수정 할 update문 service 추가

   public int userUpdate(User user)
   {
      int count = 0;
      
      try
      {
         count = userDao.userUpdate(user);
      }
      catch(Exception e)
      {
         logger.error("[UserService] userUpdate Exception", e);
      }
      
      return count;
   }


회원정보 수정할 update문 model 추가 (선언, 초기화, get+set 추가)



회원정보 수정할 update문 Ajax 통신 추가

      $.ajax({
         type : "POST",
         url:"/user/updateProc",
         data:{
                 userId:$("#userId").val(),
                 userPwd:$("#userPwd").val(),
                 userName:$("#userName").val(),
                 userEmail:$("#userEmail").val(),
                 userAddress:$("#userAddress").val(),
                 userPNum:$("#userPNum").val(),
                 userBDate:$("#userBDate").val(),
                 userNName:$("#userNName").val()
         },
         datatype:"JSON",
         beforeSend:function(xhr){
          xhr.setRequestHeader("AJAX", "true");  
         },
         success:function(response)
         {
            if(response.code==0)
            {
               alert("회원정보가 수정되었습니다.");
               location.href = "/user/myPage";
            }
            else if(response.code==400)
            {
               alert("파리미터 값이 올바르지 않습니다.");
               $("#userPwd1").focus();
            }
            else if(response.code==404)
            {
               alert("회원정보가 없습니다.");
               location.href = "/";
            }
            else if(response.code==500)
            {
               alert("회원정보 수정 중 오류가 발생했습니다.");
               $("#userPwd1").focus();
            }
            else
            {
               alert("회원정보 수정 중 오류가 발생했습니다.");
               $("#userPwd1").focus();
            }
         },
         complete:function(data)
         {
            icia.common.log(data);
         },
         error:function(xhr, status, error)
         {
            icia.common.error(error);
         }
      });


회원정보 수정할 update문 UserController.java 추가

    //★★회원정보 수정
     @RequestMapping(value="/user/updateProc", method=RequestMethod.POST)
     @ResponseBody
     public Response<Object> updateProc(HttpServletRequest request, HttpServletResponse response)
     {
        Response<Object> ajaxResponse = new Response<Object>();
        String cookieUserId = CookieUtil.getHexValue(request, AUTH_COOKIE_NAME);
        String userId = HttpUtil.get(request, "userId");
        String userPwd = HttpUtil.get(request, "userPwd");
        String userName = HttpUtil.get(request, "userName");
        String userEmail = HttpUtil.get(request, "userEmail");
        String regDate = HttpUtil.get(request, "regdate");
        String userAddress = HttpUtil.get(request, "userAddress");
        String userPNum = HttpUtil.get(request, "userPNum");
        String dogSeqList = HttpUtil.get(request, "dogSeqList");
        String userBDate = HttpUtil.get(request, "userBDate");
        String userNName = HttpUtil.get(request, "userNName");
        
        if(!StringUtil.isEmpty(cookieUserId))
        {//일단 주소를 바로 치고들어오는경우도 있기 때문에~
           User user = userService.userSelect(cookieUserId); //그래서 이걸로 정보일단 조회할거야
           
           if(user != null)
           {//status가 y일때 수정할 수 있자나
             if(StringUtil.equals(user.getStatus(), "Y")) 
             {//회원정보수정도 사용하고 있는 회원이기 때문에 Y 스테터스 확인해주는겨
                if(!StringUtil.isEmpty(userPwd) && !StringUtil.isEmpty(userName) && !StringUtil.isEmpty(userEmail))
                {//입력값이 빠진거 없이 null없이 잘 들어갔니?
                   //이제 유저객체에 값을 넣어줘야함. 현재까지는 DB에있는 값만 불러온듯
                   user.setUserName(userName);
                   user.setUserPwd(userPwd);
                   user.setUserEmail(userEmail);
                   user.setUserAddress(userAddress);
                   user.setUserPNum(userPNum);
                   user.setUserBDate(userBDate);
                   user.setUserNName(userNName);
                   
                   
                   if(userService.userUpdate(user)>0)
                   {//그리고나서 업데이트구문 날려주면 끝~! / 0보다 큰게 정상적으로 처리된거
                      ajaxResponse.setResponse(0, "Success");  //우리 정상처리는 걍 코드값 0으로 해줬엇자나 
                   }
                   else
                   {
                      ajaxResponse.setResponse(500, "internal server error");
                   }
                }
                else
                {
                   CookieUtil.deleteCookie(request, response, AUTH_COOKIE_NAME);
                   ajaxResponse.setResponse(400, "Bad Request");                    
                }        
             }
             else
             {//문제있는 회원
                CookieUtil.deleteCookie(request, response, AUTH_COOKIE_NAME);
                ajaxResponse.setResponse(400, "Bad Request");
             }
           }
           else
           {
              CookieUtil.deleteCookie(request, response, AUTH_COOKIE_NAME);
              ajaxResponse.setResponse(404, "Not Found. 회원이없다고요");
           }
        }
        else
        {//로그인된정보가 아니겠지~?
           ajaxResponse.setResponse(400, "Bad Request");
        }
        

        return ajaxResponse;
     }
      




3) 회원탈퇴 버튼 만들기

4) DB연동하여 딜리트한 회원정보 출력 확인 (※탈퇴시 모든 게시물 삭제 추가로 21.01.23 최종구현완료)



회원탈퇴 할 Delete문 xml 추가

<update id="userDelete" parameterType="String">
UPDATE TBL_USER
SET
	USER_PWD = NULL,
	USER_NAME = NULL,
	USER_EMAIL = NULL,
	STATUS = NULL,
	REG_DATE = NULL,
	USER_ADDRESS = NULL,
	USER_PNUM = NULL,
	USER_B_DATE = NULL,
	USER_NNAME = NULL,
	USER_GRADE = NULL,
	USER_POINT = NULL
WHERE 
	USER_ID = #{value}
</update>


회원탈퇴 할 Delete문 dao 추가

public int userDelete(String userId);


회원탈퇴 할 Delete문 Service 추가

   public int userDelete(String userId)
   {
	   int count = 0;
	   
	   try
	   {
		   count = userDao.userDelete(userId);
	   }
	   catch(Exception e)
	   {
		   logger.error("[UserService] userDelete", e);
	   }
	   
	   return count;
   }


회원탈퇴 할 Delete문 ajax 통신추가

   $("#btnDelete").on("click", function(){
	   if(confirm("정말 삭제 하시겠습니까?\n(※ 작성한 입양후기, 코멘트, 댓글 등은 삭제 됩니다.)") == true)
		{  	
			$.ajax({
				type:"POST",
				url:"/user/userDelete",
				data:{
					userId : $("#userId").val()
				},
				datatype:"JSON",
				beforeSend:function(xhr){
					xhr.setRequestHeader("AJAX", "true");
				},
				success:function(response){
					if(response.code == 0)
					{
						alert("탈퇴가 완료되었습니다.");
						location.href = "/index";
					}
					else if(response.code == 400)
					{
						alert("회원 정보를 찾을 수 없습니다..");
					}
					else if(response.code == 405)
					{
						alert("사용자가 아닙니다.");
						location.href = "/index";
					}
					else
					{
						alert("회원 탈퇴 중 오류가 발생했습니다.");
					}
				},
				complete:function(data)
				{
					icia.common.log(data);
				},
				error:function(xhr, status, error)
				{
					icia.common.error(error);
				}
			});
		}
   });


회원탈퇴 할 Delete문 Controller 추가 (21.01.23 ver)

 	//★★회원 탈퇴
 	@RequestMapping(value="/user/userDelete", method=RequestMethod.POST)
 	@ResponseBody
 	public Response<Object> userDelete(HttpServletRequest request, HttpServletResponse response)
 	{
 		Response<Object> ajaxResponse = new Response<Object>();
 		
 		String cookieUserId = CookieUtil.getHexValue(request, AUTH_COOKIE_NAME);
 		String userId = HttpUtil.get(request, "userId", "");
 		
 		User user = userService.userSelect(userId);
 		
 		Free free = new Free();
 		free.setUserId(userId);
 		List<Free> freeList = null;
 		List<Review> reviewList = null;
 		ReviewComment reviewComment = new ReviewComment();
 		reviewComment.setUserId(userId);
 		List<ReviewComment> rCommentList = null;
 		
 		//카운트 변수
 		long freeCount = 0;
 		long reviewCount = 0;
 		long rCommentCount = 0;
 		long basketCount = 0;
 		
 		if(user != null)
 		{
 	 		freeCount = communityService.myFreeListCount(userId);
 	 		reviewCount = communityService.myReviewListCount(userId);
 	 		rCommentCount = communityService.myRCommentListCount(userId);
 	 		basketCount = donationService.basketListCount(userId);
 			
			//로그인한 아이디(쿠키값)과 게시글 작성자가 동일한지 확인
			if(StringUtil.equals(user.getUserId(), cookieUserId))
			{			
				if(freeCount > 0)
				{
					freeList = communityService.myFreeList(free);
					
					for(int i = 0; i < freeList.size(); i++)
					{
						communityService.freeDelete(freeList.get(i).getFbsSeq());
					}
				}
				
				if(rCommentCount > 0)
				{
					rCommentList = communityService.myRCommentList(reviewComment);
					
					for(int i = 0; i < rCommentList.size(); i++)
					{
						communityService.rCommentDelete2(rCommentList.get(i).getCrbsSeq());
					}
				}
				
				if(reviewCount > 0)
				{	
					reviewList = communityService.reviewUserSelect(userId);
					
					for(int i = 0; i < reviewList.size(); i++)
					{
						if(communityService.rCommentCount(reviewList.get(i).getRbsSeq()) > 0)
						{
							communityService.rCommentDelete(reviewList.get(i).getRbsSeq());
						}
						
						try
						{
							communityService.reviewDelete(reviewList.get(i).getRbsSeq());
						}
						catch(Exception e)
						{
							logger.error("[UserController] userDelete Exception", e);
						}
						
					}				
				}
						
				if(basketCount > 0)
				{
					donationService.basketDelete2(userId);		
				}
				
				if(userService.userDelete(userId) > 0)
				{
					CookieUtil.deleteCookie(request, response, "/", AUTH_COOKIE_NAME);
					ajaxResponse.setResponse(0, "Success");
				}
				else
				{
					ajaxResponse.setResponse(500, "Internal Server Error");
				}

			}
			else
			{
				ajaxResponse.setResponse(405, "User Error");
			}
 		}
 		else
 		{
 			CookieUtil.deleteCookie(request, response, "/", AUTH_COOKIE_NAME);
 			ajaxResponse.setResponse(400, "Bad Request");
 		}
 		
 		return ajaxResponse;
 	}



5) 아이디 찾기 구현



아이디 찾기 userFind.jsp 만들기



아이디 찾기 창 contorller 추가

     @RequestMapping(value="/user/userFind")
     public String userFind(HttpServletRequest request, HttpServletResponse response)
     {
    	 return "/user/userFind";
     }


(이름과 핸드폰 번호를 이용하여) 아이디 찾기 xml 추가

<select id="userIdSearch" parameterType="com.icia.web.model.User" resultType="String"> 
SELECT
    USER_ID
FROM
    TBL_USER
WHERE
    USER_NAME = #{userName}
AND
    USER_PNUM = #{userPNum}
</select>


아이디 찾기 dao 추가

   public String userIdSearch(User user);


아이디 찾기 service 추가

   public String userIdSearch(User user)
   {
	   String userId = "";
	   
	   try
	   {
		   userId = userDao.userIdSearch(user);
	   }
	   catch(Exception e)
	   {
		   logger.error("[UserService] userIdSearch", e);
	   }
	   
	   return userId;
   }


아이디 찾기 model 추가 (추가 할 거 없음, 기존 그대로 이용)



아이디 찾기 ajax 통신 추가

    	 $.ajax({
             type:"POST",
             url:"/user/userIdSearch",
             data:{
                userName:$("#userName").val(),
                userPNum:$("#userPNum").val()
             },
             datatype:"JSON",
             beforeSend:function(xhr){
                xhr.setRequestHeader("AJAX", "true");
             },
             success:function(response){
                if(response.code == 0)
                {
                   alert("아이디는 " + response.data + "입니다.");
                   
                   if(confirm("비밀번호를 찾으시겠습니까?"))
               	   {
                	   document.getElementById("div2").style = "";
               		   document.getElementById("div1").style = "display: none;";
               	   }
                }
                else if(response.code == 400)
                {
                   alert("입력 값이 올바르지 않습니다.");
                }
                else if(response.code == 404)
                {
                   alert("아이디를 찾을 수 없습니다.");
                }
                else
                {
                   alert("아이디 찾기 중 오류가 발생했습니다.");
                }
             },
             complete:function(data)
             {
                icia.common.log(data);
             },
             error:function(xhr, status, error)
             {
                icia.common.error(error);
             }
          });	


아이디 찾기 controller 추가

     @RequestMapping(value="/user/userIdSearch")
     @ResponseBody
     public Response<Object> userIdSearch(HttpServletRequest request, HttpServletResponse response)
     {
    	 Response<Object> ajaxResponse = new Response<Object>();
    	 String userName = HttpUtil.get(request, "userName", "");
    	 String userPNum = HttpUtil.get(request, "userPNum", "");
    	 String userId = "";
    	 
    	 User user = new User();
    	 
    	 if(!StringUtil.isEmpty(userName) && !StringUtil.isEmpty(userPNum))
    	 {
    		 user.setUserName(userName);
    		 user.setUserPNum(userPNum);
    		 
    		 userId = userService.userIdSearch(user);
    		 
    		 if(!StringUtil.isEmpty(userId))
    		 {
    			 ajaxResponse.setResponse(0, "Success", userId);
    		 }
    		 else
    		 {
    			 ajaxResponse.setResponse(404, "Not Found");
    		 }
    	 }
    	 else
    	 {
    		 ajaxResponse.setResponse(400, "parameter error");
    	 }
    	 
    	 return ajaxResponse;
     }

좋은 웹페이지 즐겨찾기