-
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
Refresh Token 추가 & Redis 연결 #386
Conversation
* redis 사용을 위한 cache-manager * 저장소로 redis를 사용하기 위한 cache-manager-redis-store Co-authored-by: khw3754 <[email protected]>
* redis 사용을 위한 @nest/cache-manager Co-authored-by: khw3754 <[email protected]>
* 최신 버전이 호환성에 문제가 있어 연결되지 않을 수도 있음 * cache-manager, cache-manager-redis-store 다운그레이드
* Config로부터 redis 관련 설정 값을 받아 넣어줌 * cache 저장소를 redis로 설정
* /users/refresh 로 refresh token을 보내면 refresh된 access, refresh token을 제공 * 기존 로그인 로직에서 refresh token 관련 식별자 redis에 추가
* refresh token 정보가 redis에 없다면 존재하는 토큰이 아니라는 에러 추가 * update dto에서 null 표시 ?로 변경
* registerAsync로 변경 * useFactory의 설정 간단히 변경
* sign 함수의 option에서는 expiresIn을 추가할 수 없어 redis에 토큰을 넣을 때 ttl 설정! (redis 자체에도 기본 설정 걸려있음) * payload {} (객체?) 형태로 변경 * TTL 토큰 만료 값 모두 상수화
* Auth, Music 테스트 코드에 redis 설정을 위한 CacheModule, redis 환경 설정을 위한 ConfigModule 추가
* develop branch와 merge 후 ConfigModule, CacheModule 다시 추가
* github secret key에 저장한 환경변수 값 추가
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.
회의한대로 꼼꼼하게 잘 구현하신 것 같아요! 고생하셨습니다. 👍 배포할 때 환경변수 설정이나 컨테이너 올리는 것만 같이 잘 해보면 될 것 같아요
const payload = { user_id }; | ||
const newRefreshTokenUuid = v4(); | ||
const newAccessToken = this.jwtService.sign(payload); | ||
const newRefreshToken = this.jwtService.sign( | ||
{ newRefreshTokenUuid }, | ||
this.refreshOptions, | ||
); | ||
|
||
await this.cacheManager.del(refresh_id); | ||
await this.cacheManager.set(newRefreshTokenUuid, user_id, { | ||
ttl: ONE_WEEK_TO_SECONDS, | ||
}); |
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.
전에 얘기했던 RefreshToken 까지 새로 refresh 하기로 한 것 잘 반영하신 것 같아요!
imports: [ConfigModule], | ||
useFactory: async (configService: ConfigService) => ({ | ||
store: redisStore, | ||
host: configService.get<string>('REDIS_HOST_IP'), |
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.
환경변수를 컨테이너 상황에 맞춰서 잘 넣어줘야 할 것 같네요!
Issue
Overview
users/refresh
API 구현-> body에 refreshToken 담아 전송 -> redis에 새로운 토큰 정보 저장 후 기존 토큰 정보 삭제
users/login
API에 redis에 refreshToken 관련 정보 저장Screenshot
To Reviewers
도커 컴포즈는 docker를 잘못 이해해서 했던 얘기같아요 바로 redis 연결 했습니다!
이후 오류는 클라이언트랑 연동하면서 보면 좋을 것 같아요