로그인을 하면 리프레시 토큰이 저장되고(empty claims이다)
로그아웃을 하면 널값으로 바뀐다.
Member.kt
fun removeRefreshToken() {
this.refreshToken = null
}
MemberService.kt
@Transactional
fun logout() {
val authenticatedEmail = authenticationUtil.getUserEmail()
val member = memberRepository.findMemberByEmail(authenticatedEmail) ?: throw Exception("등록된 멤버가 아닙니다")
member.removeRefreshToken()
// memberRepository.save(member) @Transactional 안쓰면 따로 jpa 한테 시켜서 저장해야되고 어노테이션 쓰면 더티체킹으로 리프레시 토큰에 널값이 업데이트 된다
}
엑세스 토큰의 보안을 위해 엑세스 토큰의 시간을 짧게 지정하고 만료되기까지 더 긴 시간이 걸리는 리프레시 토큰으로 서비스 사용자가 잦은 로그아웃으로 불편하지 않게 하고 탈취로부터 안전하도록 엑세스 토큰을 자주 갱신할 수 있다.