오늘도 즐거운 프로젝트~ 날이다. 나름대로 즐겁게 코드를 치는 나날을 보내니 뭔가뭔가다.
오늘 작성한 것은 토큰을 통해서 비밀번호 분실시, 새로 설정 가능한 api를 제작하였다.
public String createTemporaryAuthorization (String userId, String email) {
Date now = new Date();
Date expriDate = new Date(now.getTime() + 5 * 60 * 1000);
return BEARER_PREFIX +
Jwts.builder()
.setSubject(userId) // 유저 아이디
.claim("email", email) // 유저 이메일
.setIssuedAt(now).setExpiration(expriDate) // 발행 시간 + 유지시간
.signWith(key,signatureAlgorithm)
.compact();
}
이와 같은 방식으로 임시토큰을 발급하여 5분 동안 유지 가능하게 만들었다. 다음으로 이를 다시 헤더에서 넣어서 확인한다.
public String getJwtFromHeader(HttpServletRequest request, String token) {
String bearerToken = request.getHeader(token);
if (StringUtils.hasText(bearerToken) && bearerToken.startsWith(BEARER_PREFIX)) {
return bearerToken.substring(7);
}
return null;
}
위와 같은 방식으로 발행된 토큰을 헤더에 넣어서 토큰에 넣은 필요한 데이터를 뽑아낸다
public FindRequestDto readToken(String token) {
Jws<Claims> jws = Jwts.parserBuilder()
.setSigningKey(key)
.build().parseClaimsJws(token);
Claims claims = jws.getBody();
String userId = claims.getSubject();
System.out.println("아이디 : " + userId);
String email = claims.get("email").toString();
System.out.println("이메일 : " + email);
FindRequestDto findRequestDto = new FindRequestDto(userId , email);
return findRequestDto;
}
즉, 이메일과 아이디를 통해 다시 user 를 찾아 그 유저의 패스워드를 변경하여 레포지토리에 저장하는 코드를 작성하였다.
//패스워드 변경 api
public ResponseEntity<MessageResponseDto> changePassword(HttpServletRequest request, ChangPasswordRequestDto changPasswordRequestDto) {
String token = jwtUtil.getJwtFromHeader(request, "temporary_Authorization").substring(7);
//토큰에서 값 찾아오기
String userId = jwtUtil.readToken(token).getUserId();
String email = jwtUtil.readToken(token).getEmail();
// 유저 찾아오기
User user = PasswordFind(userId,email);
// 인코딩
String password = passwordEncoder.encode(changPasswordRequestDto.getPassword());
// 변경, 저장
user.change(password);
userRepository.save(user);
MessageResponseDto messageResponseDto = new MessageResponseDto("비밀번호를 변경했습니다. ", HttpStatus.OK.value());
return ResponseEntity.status(HttpStatus.OK).body(messageResponseDto);
}
사실상 글만 가득한 블로근데 이런게 들어가니까 이상하다.
'Spring' 카테고리의 다른 글
항해 99 실전 프로젝트 - CRUD (0) | 2023.10.09 |
---|---|
항해 99 6주차 - 마무리 (0) | 2023.09.25 |
항해 99 6주차 - 1일 (0) | 2023.09.19 |
항해 99 5주 - 마무리 (0) | 2023.09.17 |
항해 99 5주차 - 6일 (0) | 2023.09.16 |