회원가입_인증 메일 발송-3

hiyayeah·2023년 1월 18일
0

MVC_Model1 -> Spring_MVC

목록 보기
11/12

인증 메일 최종편이길 바라며..

계획

  • 회원이 인증 메일 내 링크를 클릭하면 넘어온 인증 정보를 확인해 일치여부를 따진다.
  • 일치할 시 member 테이블의 member_auth_gb 컬럼을 변경해준다.(N → Y)
  • 일치할 시 auth_info 테이블에서 해당 회원의 인증정보 데이터를 삭제한다.

1. 인증 정보 일치 여부 확인

앞서 인증 메일의 하이퍼링크를 클릭하면 아래와 같은 주소로 이동하도록 설정해두었다.

"<a href='http://localhost:8081/ooo/memberAuth?idx=" + idx + "&authCode=" + authCode + "'>
<b>인증하려면 클릭하세요.</b></a>"
  • MemberController.java
// 메일 인증 처리 
@GetMapping (value = "memberAuth")
public String memberAuth(@RequestParam int idx, @RequestParam String authCode) {
	
	// member_idx, 인증코드 파라미터 가져와서 AuthInfoBean 객체에 저장
	AuthInfoVO authInfo = new AuthInfoVO(idx, authCode);
	
	// checkAuthInfo() 메서드 호출하여 인증 정보 확인 요청
	int authSuccessCount = service.checkAuthInfo(authInfo);
	System.out.println(authSuccessCount);
	
	return "";
}
  • MemberMapper.xml
<!-- 회원가입 - 인증 정보 일치 여부 확인 -->
<select id="selectAuthInfo" resultType="integer">
	SELECT COUNT(*)
		FROM auth_info
		WHERE
			member_idx = #{member_idx}
		AND
			auth_code = #{auth_code}
</select>

값이 잘 넘어오는지 콘솔에 찍어보았다.

INFO : jdbc.sqlonly - SELECT COUNT(*) FROM auth_info WHERE member_idx = 8 AND auth_code = '$XXMs3cmfsaaJWVcPvnhvIk7z$yIwFJlSqFCr6V!4UTv4f$jAM' 

INFO : jdbc.resultsettable - 
|---------|
|count(*) |
|---------|
|1        |
|---------|

1

잘 넘어오는 것을 확인했으니 다음 단계

2-1. 일치 시 Member 테이블 인증 상태 컬럼 변경

  • MemberController.java
// 메일 인증 처리 
@GetMapping (value = "memberAuth")
public String memberAuth(@RequestParam int idx, @RequestParam String authCode) {
	
	.
    .
    .
	
	if(authSuccessCount > 0) {
		int authUpdateCount = service.modifyAuthStatus(idx);
	}
	
	return "";
}
  • MemberMapper.xml
<!-- 메일 인증 - Member 테이블 인증 상태 컬럼 UPDATE -->
<update id="updateAuthStatus">
	UPDATE 
			member
		SET 
			member_auth_gb = 'Y' 
		WHERE
			member_idx = #{idx}
</update>

2-2. auth_info 테이블 데이터 삭제

  • MemberController.java
// 메일 인증 처리 
@GetMapping (value = "memberAuth")
public String memberAuth(@RequestParam int idx, @RequestParam String authCode) {
	
	.
    .
    .
	
	if(authSuccessCount > 0) {
		int authUpdateCount = service.modifyAuthStatus(idx);
        int authInfoDeleteCount = service.deleteAuthInfo(idx);
	}
	
	return "";
}
  • MemberMapper.xml
<!-- 메일 인증 - 인증됐을 경우 auth_info 테이블 데이터 삭제 -->
<delete id="deleteAuthInfo">
	DELETE
		FROM auth_info
		WHERE
			member_idx = #{idx}
</delete>
  • 확인

UPDATE, DELETE 모두 잘 된 것을 확인!

3. 성공/실패시 경로 설정

// 메일 인증 처리 
@GetMapping (value = "memberAuth")
public String memberAuth(@RequestParam int idx, @RequestParam String authCode, Model model) {
	
	// member_idx, 인증코드 파라미터 가져와서 AuthInfoBean 객체에 저장
	AuthInfoVO authInfo = new AuthInfoVO(idx, authCode);
	
	//checkAuthInfo() 메서드 호출하여 인증 정보 확인 요청
	int authSuccessCount = service.checkAuthInfo(authInfo);
	System.out.println(authSuccessCount);
	
	// => 인증 성공 시 인증 정보 갱신
	// => 아니면, "인증 실패. 인증 정보를 확인하세요." 출력
	if(authSuccessCount > 0) {
		int authUpdateCount = service.modifyAuthStatus(idx);
		int authInfoDeleteCount = service.deleteAuthInfo(idx);
		
		// => 성공 시, 로그인 페이지 서블릿 주소 요청
		// => 실패 시, "인증 실패. 인증 정보를 확인하세요." 출력
		if(authUpdateCount > 0 && authInfoDeleteCount > 0) {
			return "member/login";
		} else {
			model.addAttribute("msg", "인증 정보 갱신 실패. 재시도 바랍니다.");
			return "fail_back";
		}
		
	} else {
		model.addAttribute("msg", "인증 실패. 인증 정보를 확인하세요.");
		return "fail_back";
	}
	
}

🤣길었던 회원 인증(메일) 처리 완료🤣

0개의 댓글