Skip to content
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

Merged
merged 14 commits into from
Jan 29, 2024
Merged

Refresh Token 추가 & Redis 연결 #386

merged 14 commits into from
Jan 29, 2024

Conversation

sk000801
Copy link
Member

@sk000801 sk000801 commented Jan 27, 2024

Issue

Overview

  • users/refresh API 구현
    -> body에 refreshToken 담아 전송 -> redis에 새로운 토큰 정보 저장 후 기존 토큰 정보 삭제
  • users/login API에 redis에 refreshToken 관련 정보 저장
  • CacheModule 설치 후 Auth 모듈에 추가
  • 자세한 내용은 여기 우리 노션 에서 읽어보시면 됩니당

Screenshot

  • Redis에 정보 저장했을 때 (로컬이에요)
  • 서버에 잘 띄워진 모습

To Reviewers

도커 컴포즈는 docker를 잘못 이해해서 했던 얘기같아요 바로 redis 연결 했습니다!

이후 오류는 클라이언트랑 연동하면서 보면 좋을 것 같아요

sk000801 and others added 11 commits January 25, 2024 15:09
* 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 추가
@sk000801 sk000801 added ✨ feat 기능 개발 🖥 server server labels Jan 27, 2024
@sk000801 sk000801 added this to the 🔧 etc milestone Jan 27, 2024
@sk000801 sk000801 self-assigned this Jan 27, 2024
* develop branch와 merge 후 ConfigModule, CacheModule 다시 추가
@sk000801 sk000801 changed the title Refresh Token 추가 & Redis 연결 (연결은 진행중!) Refresh Token 추가 & Redis 연결 Jan 29, 2024
@sk000801 sk000801 marked this pull request as ready for review January 29, 2024 05:42
@sk000801 sk000801 requested a review from khw3754 as a code owner January 29, 2024 05:42
* github secret key에 저장한 환경변수 값 추가
Copy link
Collaborator

@khw3754 khw3754 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

회의한대로 꼼꼼하게 잘 구현하신 것 같아요! 고생하셨습니다. 👍 배포할 때 환경변수 설정이나 컨테이너 올리는 것만 같이 잘 해보면 될 것 같아요

Comment on lines +134 to +145
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,
});
Copy link
Collaborator

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'),
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

환경변수를 컨테이너 상황에 맞춰서 잘 넣어줘야 할 것 같네요!

@sk000801 sk000801 merged commit bba6d14 into develop Jan 29, 2024
1 check passed
@sk000801 sk000801 deleted the server/feature/383 branch January 29, 2024 06:15
@sk000801 sk000801 linked an issue Feb 1, 2024 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨ feat 기능 개발 🖥 server server
Projects
None yet
Development

Successfully merging this pull request may close these issues.

auth 로직에 refresh token 추가
2 participants