가게 상세 페이지에서는 크게 두가지 분기처리가 되어있다.
토리는 앱 실행 후 첫 화면에서 로그인을 강제하지 않는다.
그러다 보니 게스트와 유저 모두 접근이 가능하면서 유저일 때에는 추가 데이터를 제공하는 가게 상세 정보 API에서 문제가 생겼다.
가게 상세 정보에선 가게정보, 화장실 시설 정보, 메뉴,내 리뷰, 5개의 리뷰정도를 반환하고있다.
이 중 유저가 로그인을 해야만 나오는 정보는 내 리뷰, 리뷰에서 도움이 된 리뷰(좋아요 기록 같은 개념.)이다.
@ApiPlace.GetPlace({
summary: '가게 상세 조회',
})
@Get(':placeId')
@UseGuards(AllowGuestGuard)
async getPlace(
@GetAuthorizedUser() authorizedUser: IAuthorizedUser,
@Param('placeId', ParseIntPipe) placeId: number,
): Promise<PlaceDetailDto> {
return await this.placeService.getPlaceByPlaceId(
placeId,
authorizedUser?.userId,
);
}
현재 가게 상세 정보를 조회하는 api는 AllowGuestGuard
를 통해 로그인 한 유저와 게스트 상태를 확인한다(토큰의 유무로 회원 비회원 판단 후 처리). 만약 로그인 한 유저의 RT(RefreshToken)
가 만료되면 회원이 아닌 비회원으로 인식해야하지만, PassportStrategy
에 의해 JWTExpired
로 처리되어 비회원이 아닌 예외를 반환한다.
지금까지 생각나는 방법은
두 가지 정도인 것 같다.
1번은 너무 투머치고 PassportStrategy의 존재 의의를 거스른다 생각하여 바로 패스했다.