⭐알게 된 점⭐
로그인을 할 때 AccessToken과 refreshToken을 같이 발급받아
AccessToken은 Header에 추가를 해주고 refreshToken은 redis에 저장해둔다.
로그아웃 할 때, redis에 사용자의 refreshToken이 있는지 조회한 후
refreshToken이 존재할 경우 radis에서 해당 token을 삭제한 후
logout을 붙여 다시 redis저장해준다 (블랙리스트 등록)
public String logout(HttpServletRequest request, User user) {
String accessToken = jwtUtil.getJwtFromHeader(request);
if(!jwtUtil.validateToken(accessToken)){
throw new IllegalArgumentException("유효하지 않은 토큰입니다");
}
if(redisTemplate.opsForValue().get("RT:"+user.getUserId())!=null){
redisTemplate.delete("RT:"+user.getUserId());
}
Claims info = jwtUtil.getUserInfoFromToken(accessToken);
Long expiration = info.getExpiration().getTime();
redisTemplate.opsForValue().set(accessToken,"logout",expiration, TimeUnit.MICROSECONDS);
return "로그아웃 성공";
}
🐰 END
꼬박 하루가 걸려서 완성해 아직 미흡한 부분도 있지만
스스로 해내서 뿌듯하다!