-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
accessToken 만료 시 refreshToken을 이용하여 accessToken 재발급하라 #62
Conversation
242738f
to
e35858a
Compare
refresh token으로 데이터베이스에 사용자 정보를 가져올 수 있습니다
refresh token으로 회원 정보를 가져옵니다 refresh token의 회원 이메일 정보를 accessToken과 accessToken 만료시간을 발급을 합니다
const HEADERS = { | ||
authorization: | ||
'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjoxLCJpYXQiOjE2OTQ1MjI0NzUsImV4cCI6MTY5NTczMjA3NSwic3ViIjoiUkVGUkVTSCJ9.A2PfZdj91q6MIapXrvTB6bUd7blhqrrDY2yh0eYdGPY', | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
headers 테스트는 object형태에 authorization 속성을 선언해야만 테스트가 가능합니다
const member = await this.memberRepository.findMemberByRefreshToken(refreshToken) | ||
|
||
if (!member) { | ||
throw new RefreshTokenNotFoundException('Refresh Token 정보를 찾을 수 없습니다') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
RefreshTokenNotFoundException은 토큰이 존재 않을 때 발생하는 에러이지만 현재 refreshToken으로 불러오는 정보는 Member 정보로 MemberNotFoundException이 올바르다고 판단이 됩니다
} | ||
|
||
if (member.tokenExpirationTime < now) { | ||
throw new RefreshTokenExpiredException('Refresh Token 만료 시간이 지났습니다') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
TokenExpriedException('Token이 만료되었습니다 ')
8639f44
to
cf14800
Compare
현재 시간이 refresh token 만료시간을 넘으면 RefreshTokenNotFoundException 예외를 던집니다 만료 시간이 넘지 않으면 accessToken을 발급합니다
프론트 header에 담긴 RefreshToken을 담아 서버에 유효한 값인지 아닌지 검증을 합니다. 전달 받은 RefreshToken를 서버로 전달합니다
올바른 토큰인지 아닌지 검증하는 validateToken 메서드를 추가했습니다
요약 (Summary)
access token이 만료됐을 경우 프론트에서 저장하고 있던 refresh token을 이용하여 api 서버에서 access token을 재발급할 수 있
습니다.
프론트에서 Authorization Header에 refresh token을 담아서 전송하며 서버에서는 해당 값이 유효한지 검증을 합니다.
전달 받은 refresh token을 가지고 있는 회원이 있는지 찾습니다.
만약 유효한 refresh token이 없다면 memberService.findMemberByRefreshToken 메소드를 호출할 때 예외를 발생시킵니다.
refresh token이 존재하고 만료도 안됐으면 access token을 생성해서 반환합니다
해당 refresh token이 없거나 refresh token이 만료된 경우는 예외를 발생시킵니다.
배경 (Background)
access token이 만료가 되면 재발급을 해야 합니다. 그러기 위해서는 DB(데이터베이스)에 refresh token이 있는지 없는지를 확인합니다
존재 하지 않으면 예외를 던집니다.
계획 (Plan)
POST /auth/token
으로 api를 요청합니다참고 사항