○ 아이디 비밀번호 찾기
① 아이디/비밀번호 찾기 과정 설명
1) 이름과 이메일을 입력받아서 일치가 되면
2) 임시 비밀번호를 발급해서
- 대문자, 소문자, 숫자를 이용해서 랜덤하게 10글자
- 생성된 임시 비밀번호를 테이블에서 수정하기
3) 아이디와 임시 비밀번호를 이메일로 전송하기
4) 임시비밀번호로 로그인 한 후,
5) 본인이 회원 정보 수정에서 비밀번호를 수정한다
② DAO : MemberDAO.java → findID()
public boolean findID(MemberDTO dto) {
boolean flag=false;
try {
con=dbopen.getConnection();
sql=new StringBuilder();
//이름과 이메일이 일치하는 id 가져오기
sql.append(" SELECT id ");
sql.append(" FROM member ");
sql.append(" WHERE mname=? AND email=? ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, dto.getMname());
pstmt.setString(2, dto.getEmail());
rs=pstmt.executeQuery();
if(rs.next()) {//이름과 이메일 일치되었다면
// 1)아이디
String id=rs.getString("id");
// 2)임시 비밀번호(imsiPW) 발급
// 대문자, 소문자, 숫자를 이용해서 랜던하게 10글자를 만들기
String[] ch= {//인덱스 0~61
"A","B","C","D","E","F","G","H","I","J","K","L","M",
"N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"a","b","c","d","e","f","g","h","i","j","k","l","m",
"n","o","p","q","r","s","t","u","v","w","x","y","z",
"0","1","2","3","4","5","6","7","8","9"
};
//ch배열에서 랜럼하게 10글자 발생
StringBuilder imsiPW=new StringBuilder();
for(int i=0; i<10; i++) {
int num=(int)(Math.random()*ch.length);
imsiPW.append(ch[num]);
}
//임시비밀번호로 테이블 업데이트하기
sql=new StringBuilder();
sql.append(" UPDATE member ");
sql.append(" SET passwd=? ");
sql.append(" WHERE mname=? AND email=? ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, imsiPW.toString());//임시비밀번호
pstmt.setString(2, dto.getMname());
pstmt.setString(3, dto.getEmail());
int cnt=pstmt.executeUpdate();
if(cnt==1) {//업데이트 되면, 아이디와 임시비밀번호를 이메일로 전송
String content="※임시비밀번호는 로그인 후, 변경하시기 바랍니다.";
content += "<hr>";
content += "<table border='1'>";
content += "<tr>";
content += " <th>아이디</th>";
content += " <td>"+ id + "</td>";
content += "</tr>";
content += "<tr>";
content += " <th>임시비밀번호</th>";
content += " <td>"+ imsiPW.toString() + "</td>";
content += "</tr>";
content += "</table>";
String mailServer="실제 메일서버 주소";
Properties props=new Properties();
props.put("mail.smtp.host", mailServer);
props.put("mail.smtp.auth", true);
Authenticator myAuth = new MyAuthenticator();
Session sess=Session.getInstance(props, myAuth);
InternetAddress[] address={ new InternetAddress(dto.getEmail()) };
Message msg=new MimeMessage(sess);
msg.setRecipients(Message.RecipientType.TO, address);
msg.setFrom(new InternetAddress("받는 사람에게 표시될 이메일 주소"));
msg.setSubject("myweb 아이디/비번입니다");
msg.setContent(content, "text/html; charset=UTF-8");
msg.setSentDate(new Date());
Transport.send(msg);
flag=true;//최종적으로 성공
}else {
flag=false;
}
}
}catch(Exception e) {
System.out.println("아이디/비번 찾기 실패: " + e);
}finally{
DBclose.close(con, pstmt, rs);
}
return flag;
}
③ 뷰단(정보입력) : main/webapp/member/findID.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="../header.jsp"%>
<div class="container">
<img src="../images/findID.png" style="margin: auto; width: 500px" >
<form method="post" action="findIDProc.jsp" onsubmit="return findIDCheck()">
<table class="table table-bordered" id="login_table">
<tr>
<th>이름</th>
<td>
<input type="text" name="mname" id="mname"
class="form-control" placeholder="이름" maxlength="20" required>
</td>
</tr>
<tr>
<th>이메일</th>
<td>
<input type="email" name="email" id="email"
class="form-control" placeholder="이메일" required>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="아이디/비번찾기" class="btn"/>
<input type="reset" value="취소" class="btn"/>
</td>
</tr>
</table>
</form>
</div>
<%@ include file="../footer.jsp"%>
④ 뷰단(아이디/비번찾기 결과) : main/webapp/member/findIDProc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp"%>
<%@ include file="../header.jsp"%>
<div class="container">
<h3>아이디/비번 찾기 결과</h3>
<%
String mname=request.getParameter("mname").trim();
String email=request.getParameter("email").trim();
dto.setMname(mname);
dto.setEmail(email);
boolean flag=dao.findID(dto);
if(flag==false){
out.println("<p>이름/이메일을 다시 한번 확인해주세요</p>");
out.println("<p><a href='javascript:history.back()'>뒤로 가기</a></p>");
}else{
String message="";
message += "아이디/임시비밀번호가 이메일로 전송되었습니다.\\n";
message += "임시비밀번호는 로그인 후 회원정보 수정에서 수정하시기 바랍니다.";
out.println("<script>");
out.println(" alert('" + message + "');");
out.println(" location.href='loginForm.jsp'");
out.println("</script>");
}
%>
</div>
<%@ include file="../footer.jsp"%>
○ 회원탈퇴
① DAO : MemberDAO.java → memberWithdraw()
- 회원 탈퇴를 진행하면 id와 pw가 일치하는 행을 찾아서 mlevel='F1'(탈퇴회원)으로 수정함
- 보통의 웹사이트들은 회원탈퇴 시에 회원정보를 DB에서 삭제하지 않고 회원레벨을 수정한다고 함
public int memberWithdraw(MemberDTO dto) {
int cnt=0;
try {
con=dbopen.getConnection();
sql=new StringBuilder();
sql.append(" UPDATE member ");
sql.append(" SET mlevel='F1' ");
sql.append(" WHERE id=? AND passwd=? ");
pstmt = con.prepareStatement(sql.toString());
pstmt.setString(1, dto.getId());
pstmt.setString(2, dto.getPasswd());
cnt=pstmt.executeUpdate();
} catch (Exception e) {
System.out.println("회원 탈퇴 실패: " + e);
}finally{
DBclose.close(con, pstmt);
}
return cnt;
}
② 뷰단(비밀번호 입력) : main/webapp/member/memberWithdraw.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="auth.jsp"%>
<%@ include file="ssi.jsp"%>
<%@ include file="../header.jsp"%>
<img src="../images/memberWithdraw.png" style="margin: auto;" ><br>
<span style="color:#A68263; font-weight: bold">탈퇴를 진행하기 위해 비밀번호를 다시 확인합니다</span>
<div class="container">
<form method="post" action="memberWithdrawProc.jsp" onsubmit="return withdrawCheck()">
<tr>
<th>비밀번호</th>
<td>
<input type="password" class="form-control" name="passwd" id="passwd" required>
</td>
</tr>
<tr>
<td colspan="2">
<input id="memBtn" type="submit" value="회원탈퇴" class="btn">
</td>
</tr>
</table>
</form>
</div>
<%@ include file="../footer.jsp"%>
③ ②에서 비밀번호 유효성 검사 : myscript.js → withdrawCheck()
function withdrawCheck(){
var passwd=document.getElementById("passwd").value;
passwd=passwd.trim();
if(!(passwd.length>=5 && passwd.length<=10)){
alert("비밀번호는 5~10글자로 입력해 주세요");
document.getElementById("passwd").focus(); //비밀번호 칸에 커서 생성
return false;
}
var message="확인 버튼을 누르면 회원탈퇴됩니다.\n탈퇴를 계속 진행할까요?";
if(confirm(message)){//확인true, 취소flase
return true;//서버로 전송
}else{
return false;
}
}
④ 뷰단(탈퇴 결과) : main/webapp/member/memberWithdrawProc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="auth.jsp"%>
<%@ include file="ssi.jsp"%>
<%@ include file="../header.jsp"%>
<h3>회 원 탈 퇴 결 과</h3>
<%
String passwd = request.getParameter("passwd").trim();
dto.setId(s_id);
dto.setPasswd(passwd);
int cnt = dao.memberWithdraw(dto);
if(cnt==0){
out.println("<p>비밀번호가 일치하지 않습니다</p>");
out.println("<p><a href='javascript:history.back()'>뒤로 가기</a></p>");
}else{
out.println("<script>");
out.println(" alert('탈퇴가 완료되었습니다');");
out.println(" location.href='logout.jsp';"); //탈퇴 후 로그아웃 상태 만들기
out.println("</script>");
}
%>
<%@ include file="../footer.jsp"%>
'Project > myweb_JAVA' 카테고리의 다른 글
11. 포토갤러리 ① (테이블 생성, DTO, 파일업로드, MultipartRequest) (0) | 2022.09.28 |
---|---|
09. 회원 관리 ③ (회원가입, 다음 우편번호 API) (1) | 2022.09.19 |
08. 회원 관리 ② (세션, 쿠키, 로그인, 로그아웃 ) (0) | 2022.08.03 |
07. 회원 관리 ① (테이블 생성, DTO, DAO, 공통코드) (0) | 2022.08.02 |
06. 답변형 게시판 ④ (게시글 리스트 페이징, 게시글 검색) (0) | 2022.07.27 |
댓글