반응형
웹페이지 입력 인증키 전송 구현
- @GetMapping 형식으로 id를 받아서 출력하는 코드 구현
- 계정 활성화 알림 페이지
웹페이지 입력 인증키 전송 테스트
계정 활성화 페이지 접근
- http://localhost:8080/member/email-auth
임의의 값 입력
- http://localhost:8080/member/email-auth?id=123456
- 입력값 확인
인증키 값을 이용한 계정 활성화 구현
- uuid 값에 따라 계정을 활성화 여부를 결정
- 'emailAuth'를 boolean 타입으로 선언
- 인터페이스(MemberService.java)에서 emailAuth가 추가
- Implement methods 구현해야 함
- Optional<Member> findBy <Tab or Enter>
- Optional<Member> findByEmailAuthKey <Tab or Enter>
public interface MemberRepository extends JpaRepository<Member, String> {
Optional<Member> findByEmailAuthKey(String emailAuthKey);
}
@Override
public boolean emailAuth(String uuid) {
Optional<Member> optionalMember =
memberRepository.findByEmailAuthKey(uuid);
if (!optionalMember.isPresent()) {
return false;
}
Member member = optionalMember.get();
member.setEmailAuthYn(true);
member.setEmailAuthDt(LocalDateTime.now());
memberRepository.save(member);
return true;
}
- 계정 인증 시간을 저장할 변수 선언
@GetMapping("/member/email-auth")
public String emailAuth(Model model,
HttpServletRequest request) {
String uuid = request.getParameter("id");
System.out.println(uuid);
boolean result = memberService.emailAuth(uuid);
model.addAttribute("result", result);
return "member/email_auth";
}
- result 값에 따라 계정 활성화 여부 출력
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> 회원 활성화 </title>
</head>
<body>
<h1>회원 활성화</h1>
<div th:if="${result eq true}">
<p>회원님의 계정이 횔성화 되었습니다.</p>
</div>
<div th:if="${result eq false}">
<p>회원님의 계정이 횔성화에 실패하였습니다.</p>
</div>
</body>
</html>
인증키 값을 이용한 계정 활성화 테스트
- 가입된 회원정보의 계정인증여부(email_auth_yn) 값 false 확인
- 웹페이지에서 임의의 계정인증키를 입력하여서 활성화 실패
- DB에서 계정인증키(email_auth_key)를 복사
- http://localhost:8080/member/email-auth?id=2569d58b-b2cc-4d73-a823-10e46b684d7b
- 인증키 값에 따라서 결과값(true) 반환되어 계정 활성화 성공
- DB에서 계정인증여부(email_auth_yn) 값 true로 설정되고
- 계정인증시간(email_auth_dt)가 입력된 것을 확인
회원 정보 빌더 패턴 적용
@AllArgsConstructor
@NoArgsConstructor
@Builder
- 가독성 향상을 위한 빌더 패턴 적용
//build pattern
Member member = Member.builder()
.userId(parameter.getUserId())
.userName(parameter.getUserName())
.phone(parameter.getPhone())
.password(parameter.getPassword())
.regDt(LocalDateTime.now())
.emailAuthYn(false)
.emailAuthKey(uuid)
.build();
memberRepository.save(member);
- '가입 완료' 링크를 클릭하면 새 창에 열리도록 설정
String email = parameter.getUserId();
String subject = "fastlms 사이트 가입을 축하드립니다.";
String text = "<p>fastlms 사이트 가입을 축하드립니다.</p>" +
"<p>아래 링크를 클릭하셔서 가입을 완료 하세요.</p>" +
"<div><a target='_blank' href='http://localhost:8080/member/email-auth?id=" +
uuid + "'> 가입 완료 </a></div>";
mailComponents.sendMail(email, subject, text);
회원 가입 및 계정 인증 활성화 테스트
- 회원 정보 입력 - 회원 가입 하기
- 회원 가입 결과 - 회원 가입 완료
- 계정 인증 메일 수신
가입 완료 링크 클릭 전
- 계정인증상태 : false
- 계정인증시간: <null>
- '가입 완료' 링크 클릭 - 계정 활성화(새 창)
가입 완료 링크 클릭 후
- 계정인증상태 : true
- 계정인증시간: LocalDataTime.now()
반응형
'cs > java-spring-boot' 카테고리의 다른 글
[Zero-base] 6-14. 비밀번호 초기화 요청 및 메일 링크를 통한 초기화 (0) | 2022.02.18 |
---|---|
[Zero-base] 6-13. 스프링 시큐리티를 이용한 로그인&로그아웃 구현 (0) | 2022.02.17 |
[Zero-base] 6-11. 회원가입 후 메일 전송 (0) | 2022.02.16 |
[Zero-base] 6-10. JavaMailSender를 통한 메일 전송 설정 및 메일 전송 테스트 (Gmail) (0) | 2022.02.16 |
[Zero-base] 6-9. 회원가입 POST SUBMIT된 내용 JPA를 통한 DB저장 (0) | 2022.02.16 |