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

[BE] 커스텀 AuthGuard 작성 #129

Merged
merged 7 commits into from
Nov 21, 2023

Conversation

SongJSeop
Copy link
Collaborator

@SongJSeop SongJSeop commented Nov 21, 2023

📎 이슈번호

#108 [04-10] 서버는 Auth Guard를 통해 특정 서비스를 인증된 사용자만 접근할 수 있도록 제한한다

📃 변경사항

  • cookie-parser 패키지 설치
  • main.ts에서 app.use(cookieParser())로 쿠키파서 적용
  • utils 폴더 추가
  • auth.util.ts 추가
  • Jwt 생성하는 부분 auth.util.ts에 함수로 분리
  • 커스텀 AuthGuard인 CookieAuthGuard 추가

📌 중점적으로 볼 부분

cookie-auth.guard.ts 부분 로직만 신경써서 봐주시면 될 듯 합니다..
이게 맞나,,? 싶을 정도로 더럽긴 한데 나중에 리팩토링 해야겠습니다..
그러고보니 테스트 코드를 먼저 짜고 했어야 했는데 못했네요 ㅋㅋㅋ
후,, 할 일이 많아지네 점점
자세한 내용은 개발 기록 읽어 주시면 감사하겠습니다!!
만들어진 CookieAuthGuard는 인가가 필요한 곳에 @UseGuards(CookieAuthGuard)의 형식으로 사용하시면 됩니다!

🎇 동작 화면

쿠키가 없는 경우

image

당연히 Unauthorized 에러가 발생한다.

accessToken이 유효한 경우

image

인가가 잘 된 모습을 보인다.

accessToken이 유효하지 않은 경우

refreshToken이 유효하지 않은 경우

accessToken과 refreshToken의 payload에서 유효 기간을 만료한 상태로 쿠키에 저장하여 테스트 해보았다.

image

Unauthorized 에러가 발생한다.

image

쿠키도 사라진 모습을 보인다.

refreshToken이 유효한 경우
Redis에 저장된 토큰 정보와 일치한 경우

image

인가가 잘 된 모습을 보인다.

image

또한 accessToken이 현재 시간 기준으로 재발급 되었다!

Redis에 저장된 토큰 정보와 일치하지 않은 경우

로그인을 한 후 Redis의 해당 정보를 삭제하고 확인해보았다.

image

Unauthorized 에러가 발생한다.

image

역시 쿠키도 사라진 모습을 보인다.

💫 기타사항

- @types/passport-jwt 패키지 설치
- cookie-parser, @types/cookie-parser 패키지 설치
- main.ts에서 app.use(cookieParser())로 쿠키파서 적용
- utils 폴더 추가
- auth.util.ts 추가
- Jwt Payload 생성하는 부분 auth.util.ts에 함수로 분리
- 커스텀 AuthGuard인 CookieAuthGuard 추가
- auth.util.ts의 createJwtPayload를 createJwt로 변경
- 해당 로직을 사용하는 AuthService의 signIn 메서드 수정
- refreshToken 만료시간 하루로 변경
- accessToken이 유효한 경우 request.user에 user 정보 담고 인가
- accessToken이 유효하지 않은 경우 refreshToken 검사
- refreshToken이 유효하지 않은 경우 Unauthorized 에러 발생
- 유효한 경우 Redis에 저장된 토큰 정보와 비교
- 비교시 일치하지 않으면 브라우저 쿠키의 JWT를 지우고 Unauthorized 에러 발생
- 일치한다면 새로운 accessToken 발급
@SongJSeop SongJSeop added ✨ Feature 기능 개발 BE 백엔드 labels Nov 21, 2023
@SongJSeop SongJSeop requested a review from qkrwogk November 21, 2023 14:35
@SongJSeop SongJSeop self-assigned this Nov 21, 2023
Copy link
Collaborator

@qkrwogk qkrwogk left a comment

Choose a reason for hiding this comment

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

ㅋ ㅋ ㅋ이게 다 뭐죠!! 고생 진짜 많으셨습니다.
안그래도 이제 Guard 써야하는데 잘 되는지 일단 적용 먼저 해볼게요!

packages/server/src/utils/auth.util.ts Show resolved Hide resolved
packages/server/src/auth/cookie-auth.guard.ts Show resolved Hide resolved
packages/server/src/auth/cookie-auth.guard.ts Show resolved Hide resolved
packages/server/src/auth/auth.service.ts Show resolved Hide resolved
@qkrwogk qkrwogk merged commit 33d79ea into boostcampwm2023:be-develop Nov 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 ✨ Feature 기능 개발
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants