비밀번호 찾기 구현 방법
비밀번호를 찾을 이메일 계정을 사용자가 입력하면 비밀번호 변경할 URL 링크를 포함한 메일을 전송하고 해당 URL 페이지에서 비밀번호를 변경하는 경우
-. 랜덤키 생성 및 DB 저장
비밀번호 찾기 요청 > 해당 계정 회원의 별도 컬럼에 랜덤키 저장 > 메일 내 URL의 파라미터에 해당 랜덤키 첨부
사용자 : 메일 URL 링크 통해 비밀번호 변경 페이지 진입 > 비밀번호 변경 > DB 랜덤키 삭제
+. 유효기간 적용
-. JWT 생성해 URL에 파라미터로 첨부
: JWT의 Claims에 사용자 정보 담기 쉽고, 유효기간 지정 용이, DB 저장하지 않아도 됨
사용자(클라이언트) 정보 인증 방법 Session vs Token
> https://idlecomputer.tistory.com/239
https://spiralmoon.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9D%B4%EB%A1%A0-JWT-Json-Web-Token
현재 나는 사용자 정보는 Session에 저장하였고, 비밀번호 찾기 구현에만 URL에 JWT 값을 파라미터로 추가하는 형식으로 사용함.
JWT 개념 및 활용 방법
> JWT 개념
https://jwt.io/
https://catsbi.oopy.io/26b7f35c-e323-4e75-a9ee-2fe3e57ac641
JWT 활용 방법
https://velog.io/@dhk22/Spring-Security-%ED%86%A0%ED%81%B0%EB%B0%A9%EC%8B%9D-%EC%9D%B8%EC%A6%9D-JWT
ing) 토큰 검증 방법 학습 필요 > https://memostack.tistory.com/200
-. Exception) io.jsonwebtoken.MalformedJwtException: JWT strings must contain exactly 2 period characters. Found: 1
-> JWT 토큰은 2개의 .(구분자)가 존재해야한다는 Exception
tip) @Controller에서 @PathVariable 이용해 URL의 파라미터 받을 때, JWT의 dot(.) 이하가 생략되는 경우 있다. 이때는 :.+ 을 추가하면 생략되는 경우 없이 모든 받을 수 있다.
@GetMapping("user/resetPassword/{jwtToken:.+}")
public String resetPassword(@PathVariable("jwtToken") String jwtToken, Model model) {