오늘은 비밀번호 찾기를 구현했다. 딱히 찾는다기 보다는 임시비밀번호 설정해서 이메일로 날려주고, JPA로 유저 정보 읽어와서 업데이트 해주는 게 전부인데 JPA로 처음 해 보다보니 빌더나.. 이메일 라이브러리 사용이나.. 익숙하지 않아 찾아보면서 내 프로젝트에 맞게 변경하여 적용하였다.
private String address;
private String title;
private String message;
MailDTO에서 메일 주소와 제목, 내용을 담을 파라미터를 만들어주었다.
<form id="contactForm" th:action="@{/user/findPw}" th:method="post">
<div>
<span>이메일을 입력해주세요.</span>
<input type="email"id="address" name="address">
</div>
<button type="submit" >임시 비밀번호 전송</button>
</form>
View에서는 이렇게 이메일 값을 입력하고
String userEmail = request.getParameter("address");
MailDTO mailDTO = userService.findPw(userEmail);
userService.sendMail(mailDTO);
Controller에서 HttpServletRequest로 파라미터값을 가져와 userEmail에 담고 findPw로 날려줬다.
List<UserEntity> userDTOList = iUserRepository.findAllByUserEmail(userEmail);
MailDTO mailDTO = new MailDTO();
if (userDTOList.get(0).getUserEmail().equals(userEmail)) {
log.debug("### if start");
String result = changePw();
UserEntity userEntity = UserEntity.builder()
.userNo(userDTOList.get(0).getUserNo())
.userName(userDTOList.get(0).getUserName())
.userPn(userDTOList.get(0).getUserPn())
.userEmail(userDTOList.get(0).getUserEmail())
.userId(userDTOList.get(0).getUserId())
.userPw(EncryptUtil.encHashSHA256(result))
.userAddr(userDTOList.get(0).getUserAddr())
.build();
iUserRepository.save(userEntity);
mailDTO.setAddress(userEmail);
mailDTO.setTitle("[소경관] : 임시비밀번호");
mailDTO.setMessage("임시비밀번호 : [ " + result + " ]");
이런 식으로 userEmail을 기준으로 유저를 불러오고 빌더를 다시 만져주면서 비밀번호를 암호화해서 넣었다. 이때, 비밀번호는 랜덤 값을 반환하는 메소드를 따로 만들어 호출하여 사용했고 메일을 보낼 제목과 내용을 적어주고 Controller로 리턴한다. 그럼 Controller에서 sendMail로 다시 값을 보내주어 메일 보내는 것을 완료한다.
JPA로 User의 값을 변경하기 위해서는 따로 update 메소드를 사용하지 않는 것 같다. 따로 만들어서 사용하는 사람도 있는 것 같은데 영속과 준영속을 사용하여 불러온 상태(준영속)에서 값을 수정하고 다시 Save(영속)으로 만들어주는 방식으로 구현했는데 사실, 이 설명이 맞는지 아직 공부가 부족하다. 일단은 이렇게 이해하고 사용했다.
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(mailDTO.getAddress());
message.setSubject(mailDTO.getTitle());
message.setText(mailDTO.getMessage());
message.setFrom("testohju@gmail.com");
message.setReplyTo("testohju@gmail.com");
mailSender.send(message);
SendMail은 간단하게 이렇게 구현했다. mailSender를 사용하기 위해 의존성을 주입받아야 하는 것을 잊지 말자.
'Project > 소경관' 카테고리의 다른 글
[소경관] : 아이디 찾기 및 RestAPI로 문자 사용하기 및 남은 기능 체크 (0) | 2022.06.10 |
---|---|
[소경관] : Validator와 공지사항 전파 (0) | 2022.06.08 |
[소경관] : 상세보기 구현하기 (0) | 2022.06.06 |
[소경관] : 완료 항목 보기 리팩토링하기 (0) | 2022.06.05 |
[소경관] : 로그인 로직 오류 수정 (0) | 2022.06.04 |
댓글