From 7afa25b5ff1c7069f25c56409e6d148b1a740e44 Mon Sep 17 00:00:00 2001 From: jihwooon Date: Mon, 18 Mar 2024 15:13:13 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=A5=EB=B0=94=EA=B5=AC=EB=8B=88=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=B0=8F=20?= =?UTF-8?q?JWT=20=ED=86=A0=ED=81=B0=20=EA=B2=80=EC=A6=9D=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 장바구니 조회 서비스 (server/src/cartItems/application/cartItem-list.service.ts)를 업데이트했습니다. - JWT 라이브러리(jsonwebtoken)를 추가하여 토큰 유효성 검증을 강화했습니다. - 잘못된 토큰에 대한 에러 처리를 개선했습니다. - 만료된 토큰에 대한 별도 에러 처리 추가 (토큰 만료 메시지 반환) - 서비스 함수의 유형 정보를 명시했습니다. - 장바구니 조회 컨트롤러 (server/src/cartItems/web/cartItem-list.controller.ts)를 업데이트했습니다. - 요청 헤더에서 Authorization 필드를 추출하여 JWT 토큰을 가져옵니다. - JWT 토큰 검증 로직 (server/src/users/jwt/jwt.provider.ts)을 업데이트했습니다. - JWT 라이브러리 오류 처리를 개선하여 만료된 토큰과 잘못된 토큰에 대한 구체적인 에러를 발생시킵니다. --- .../src/cartItems/application/cartItem-list.service.ts | 1 + server/src/cartItems/web/cartItem-list.controller.ts | 1 + server/src/users/jwt/jwt.provider.ts | 10 ++++++++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/server/src/cartItems/application/cartItem-list.service.ts b/server/src/cartItems/application/cartItem-list.service.ts index fa1816d..bffe53a 100644 --- a/server/src/cartItems/application/cartItem-list.service.ts +++ b/server/src/cartItems/application/cartItem-list.service.ts @@ -10,6 +10,7 @@ import { findCartItemWithBook } from '../domain/cartItem.repository'; export const getCartItems = async (accessToken: any, selectedId: number[]) => { const { userId } = validateToken(accessToken); + const cartItems = await findCartItemWithBook(userId, selectedId); if (cartItems.length === 0) { throw new HttpException('장바구니가 내 도서 정보가 존재하지 않습니다.', StatusCodes.NOT_FOUND); diff --git a/server/src/cartItems/web/cartItem-list.controller.ts b/server/src/cartItems/web/cartItem-list.controller.ts index 9ddcb61..a69a6db 100644 --- a/server/src/cartItems/web/cartItem-list.controller.ts +++ b/server/src/cartItems/web/cartItem-list.controller.ts @@ -7,6 +7,7 @@ import { getCartItems } from '../application/cartItem-list.service'; const getCartHandler = async ({ body: { selectedId }, headers }: Request, res: Response) => { const accessToken = headers.authorization; + ResponseHandler(() => getCartItems(accessToken, selectedId), StatusCodes.OK, res); }; diff --git a/server/src/users/jwt/jwt.provider.ts b/server/src/users/jwt/jwt.provider.ts index c2fd566..69a4a1b 100644 --- a/server/src/users/jwt/jwt.provider.ts +++ b/server/src/users/jwt/jwt.provider.ts @@ -27,7 +27,13 @@ export const validateToken = (token: string) => { return { userId, }; - } catch (e) { - throw new HttpException('인증 할 수 없는 token 입니다', StatusCodes.UNAUTHORIZED); + } catch (err: any) { + if (err instanceof jwt.TokenExpiredError) { + throw new HttpException('로그인 세션이 만료되었습니다.', StatusCodes.UNAUTHORIZED); + } else if (err instanceof jwt.JsonWebTokenError) { + throw new HttpException('인증 할 수 없는 token 입니다', StatusCodes.BAD_REQUEST); + } + + return err; } };