조종 다음은 개발
article thumbnail

서론

사실 전부 해결한 이후 지금 보기엔 너무 간단할 실수여서 이 글을 쓸지 말지 고민했었는데 혹여나 저와 비슷한 오류를 겪은 사람이 있을지 모르기 때문에 그분들의 시간을 지키기 위해 포스팅했습니다.ㅎㅎ

 

비밀번호 재설정을 구현하고 있던 중 문제가 발생했다.

일단 현재까지의 시나리오를 보면 아래와 같다.

  1. 사용자가 비밀번호 찾기를 누른다.
  2. 이메일 주소를 입력하는 페이지가 나오고 이메일을 입력한다.
  3. 해당 이메일로 비밀번호 재설정을 할 수 있는 링크를 보내준다.
  4. 유저는 해당 링크를 클릭해 비밀번호 재설정 페이지에서 비밀번호를 변경한다.

문제가 발생한 부분

문제가 발생한 부분은 3번째 단계이다.

타임리프 HTML 템플릿을 메일로 보내는 것까지는 문제가 없는데 링크 설정에서 문제가 발생했다.

메일로 보내지는 HTML 템플릿

 

JWT를 통해 토큰을 생성하여 해당링크에 토큰과 함께 접근할 수 있도록

<https://localhost:8080/passwd/reset?jwt=토큰값>

위 링크와 같이 비밀번호 재설정 페이지 링크를 보내주는데 파라미터로 토큰값을 넘겨주려고 하였다.

 

실제로 실행해 보면 SMTP로 메일이 전송이 되어 아래와 같이 메일이 왔다.

그런데 링크를 클릭하면 https://mail.naver.com/v2/read/-1/25070 로 이동이 되었다…

해결책

이것저것 시도한 끝에 이유를 알았다.. 링크를 잘못 적었다.. ㅎㅎ

타임리프에서 링크를 적어줄 때 넘겨주는 value는 모두 아래와 같은 규칙을 사용해야 한다.

옳은 방법

<a th:href="@{{domain}{uri}(domain=${domain}, uri=${uri}, jwt=${jwt})}">비밀번호 재설정 링크</a>

잘못된 방법

<a th:href="@{${domain}{uri}(uri=${uri}, jwt=${jwt})}">비밀번호 재설정 링크</a>

위와 같이 ${domain}과 같이 사용하면 안 된다. 꼭 {변수명}{변수명=${보낸 변수명}} 와 같이 사용해야 한다.

결론

만약 네이버 메일에서 링크 클릭 시 해당 링크로 이동하지 않고 https://mail.naver .... 와 같은 링크로 이동한다면 링크가 제대로 안 적혔을 경우일 것이니 링크가 제대로 생성되는지 확인해 보자.

 

 

profile

조종 다음은 개발

@타칸

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!