이번엔 아이디/비밀번호 찾기를 구현했다.
아이디는 간단하게 이메일로만 찾을 수 있도록 구현했고,
비밀번호는 전 게시글에서 만들어놓은 메일 , 난수 클래스를 이용해서 간단하게 구현했다.
아이디와 메일을 입력하면 임시비밀번호가 발급되도록 구현했다. (암호화 적용)
Mapper.xml
<select id="findId" resultMap="MemberVOResultMap">
select * from MP_MEMBER where MEMBER_EMAIL = #{memberEmail}
</select>
<select id="findIdCheck" resultType="int">
select count(*) from MP_MEMBER where MEMBER_Email = #{memberEmail}
</select>
간단하다.
IdCheck는 유효성 검사를 위해 작성한 쿼리인데,
입력한 이메일의 수를 카운트해서 0이 나오면 팝업창을 출력하게 로직을 짯다.
findId는 select Id만해도 되지만 다른 쓸데가 있을까 싶어 모든 속성을 검색해서 VO로 받도록 해놨다.(후에 수정 예정)
DAO , DAOImpl
public List<MemberVO> findId(String memberEmail)throws Exception;
public int findIdCheck(String memberEmail)throws Exception;
@Override
public List<MemberVO> findId(String memberEmail)throws Exception{
return sqlsession.selectList("memberMapper.findId", memberEmail);
}
@Override
public int findIdCheck(String memberEmail)throws Exception{
return sqlsession.selectOne("memberMapper.findIdCheck", memberEmail);
}
현재 하나의 이메일로 아이디를 무한으로 만들 수 있지만,
배포했을때엔 이메일당 3개의 아이디만 생성할 수 있도록 할 예정이다.
이메일을 검색하면 다수의 결과가 나올 수 있기 때문에 List로 받아줬다.
Service,ServiceImpl
public List<MemberVO> findId(String memberEmail)throws Exception;
public int findIdCheck(String memberEmail)throws Exception;
@Override
public List<MemberVO> findId(String memberEmail)throws Exception{
return memberDAO.findId(memberEmail);
}
@Override
public int findIdCheck(String memberEmail)throws Exception{
return memberDAO.findIdCheck(memberEmail);
}
Controller
@RequestMapping(value="/findIdView", method=RequestMethod.GET)
public String findIdView() throws Exception{
return"/member/findIdView";
}
@RequestMapping(value="/findId", method=RequestMethod.POST)
public String findId(MemberVO memberVO,Model model) throws Exception{
logger.info("memberEmail"+memberVO.getMemberEmail());
if(memberService.findIdCheck(memberVO.getMemberEmail())==0) {
model.addAttribute("msg", "이메일을 확인해주세요");
return "/member/findIdView";
}else {
model.addAttribute("member", memberService.findId(memberVO.getMemberEmail()));
return
"/member/findId";
}
}
아이디찾기 페이지인 findIdVIew 컨트롤러와 아이디찾기 로직인 findId이다.
Post로 처리하고, 위에서 설명했듯이 count한 값이 0이면 아이디찾기 페이지로 msg라는 String값을 보낸다.
그렇지 않으면 아이디찾기 로직을 수행하고 /member/findId페이지로 이동
findIdView.jsp
<script type="text/javascript">
var msg = "${msg}";
if (msg != "") {
alert(msg);
}
</script>
<div class="text-center">
<h1 class="h4 text-gray-900 mb-2">아이디 찾기</h1>
<p class="mb-4">이메일을 입력해주세요!</p>
</div>
<form class="user" action="/member/findId" method="POST">
<div class="form-group">
<input type="email" class="form-control form-control-user"
id="memberEmail" aria-describedby="emailHelp" name="memberEmail"
placeholder="Enter Email Address...">
</div>
<button type="submit" class="btn btn-primary btn-user btn-block">
Find ID
</button>
</form>
<hr>
<a href="/member/loginView" class="btn btn-facebook btn-user btn-block">
Login
</a>
<hr>
<div class="text-center">
<a class="small" href="/board/list">메인페이지</a>
</div>
아이디찾기 뷰이다. 디자인부분을 빼고 기능적인 부분의 코드만 넣었다.
${msg}를 사용해 유효성검사를 한다.
findId.jsp
<div class="card o-hidden border-0 shadow-lg my-5">
<div class="jumbotron">
<h2> 아이디는 : </h2><br/>
<ul>
<c:forEach items="${member}" var="member">
<li>${member.memberId} </li><br/>
</c:forEach>
</ul>
<h2>입니다</h2>
<button type="button" class="btn btn-primary" onclick="location.href='/member/loginView'">로그인페이지</button>
<button type="button" class="btn btn-primary" onclick="location.href='/board/list'">메인페이지</button>
</div>
아이디찾기를 성공했을때 이동할 페이지이다.
결과
1장은 아이디찾기 뷰,
2장은 맞는 이메일이 없을때,
3장은 이메일을 통해 찾은 아이디들의 리스트이다.
'SPRING > IceWater Community' 카테고리의 다른 글
[스프링] 회원정보수정 - 닉네임,이메일 (ajax) (0) | 2021.09.24 |
---|---|
[스프링]비밀번호 찾기 구현 (1) | 2021.09.24 |
[스프링]회원가입 이메일인증 구현 (1) | 2021.09.19 |
[스프링] 자동로그인 기능 구현 - 로그인4 (0) | 2021.09.17 |
[스프링]로그인 권한설정과(인터셉터) 로그인,로그아웃 전 페이지 기억 기능 - 로그인 3 (1) | 2021.09.16 |