Closed lucaseunchae closed 4 months ago
아! 저 코멘트들은 그냥 몇 가지 제안만 드린 거니 참고만 해주세요 사실 가독성이 더 떨어지는 것 같아서 남길까말까 고민했습니다... 그리고 나머지 PR에 대한 코드리뷰는,, 죄송하지만 일요일에 마저 하겠습니다.. 짐정리가 덜 끝나서요...ㅠ 최대한 빠르게 코드 리뷰 마치고 기능 추가나, 에러 처리, 발표 준비 등등 시키시는 거 빨리 해치우겠습니다 🥹
나머지 PR은 너무 많이 쌓여있어서 코멘트 안남겨주시고 변경된 코드만 읽어보셔도 괜찮을 것 같아요! 기능 추가 등등 너무 부담 안가지셔도 됩니다!!
여행 갔다와서 짐정리 하고 피곤하셨을텐데 리뷰 고생 많으셨습니다🙌
Pull Request
작업한 내용
defaultErrorHandler
를 전역적으로 추가 했습니다.userService.authenticate
를 구현했습니다.loginRequired
미들웨어에userService.authenticate
를 사용해서 인증 방식을 구현 했습니다.injectUserId
미들웨어에 있던 인증 에러를 해결하기 위해loginRequired
미들웨어에{ allowAnonymous: boolean }
과 같은 옵션을 추가했습니다./api/auth
인증 API에loginRequired({ skipAuthError: true })
와 같이 401 에러 반환을skip
하는 방식을 적용해서 API 로직을 변경했습니다.인증 로직
loginRequired()
는 인증 과정을 거치고 인증 실패시 401 에러를 응답합니다.loginRequired({ allowAnonymous: true })
는 토큰이 아예 존재하지 않는 경우에는next()
를 호출해서 컨트롤러의 로직을 수행합니다. 그 외의 경우는 401 에러를 응답합니다. 방 목록 API의isJoined
필드를 위해 해당 옵션이 사용 되고 있습니다.loginRequired({ skipAuthError: true })
은 인증에 실패해도next()
호출을 통해 컨트롤러 로직으로 넘어가지만, 인증에 성공한 경우에만req.userId
값이 존재하기 때문에/api/auth
API에서 사용됩니다./api/auth
API는 사용자가 페이지에 최초 접근시 한번 호출되는 API입니다. 사용자가 Refresh Token의 유효기간 내에 페이지에 재방문 하면 인증 API에 의해 새로운 토큰이 재발급 됩니다.PR Point
refresh_tokens
테이블을 만드는 쿼리문을 로컬 환경에서 실행해 주세요.const ACCESS_TOKEN_EXPIRES_IN = "3s";
와 같이 유효기간을 짧게 임시로 변경하고, 인증을 하면 쿠키와 DB에 있는 Access Token, Refresh Token이 재발급 되는지 확인해 주세요.📸 스크린샷
loginRequired
미들웨어가 붙은 내 프로필 조회 API를 호출한 경우인데, Refresh Token의 유효기간(14일) 지나지 않아서 새로운 토큰을 발급한 상황입니다.(Access Token은 같아보이지만 뒤의 내용이 변경됨)closed #31