Skip to content

Commit

Permalink
장바구니 조회 서비스 및 JWT 토큰 검증 개선
Browse files Browse the repository at this point in the history
- 장바구니 조회 서비스 (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 라이브러리 오류 처리를 개선하여 만료된 토큰과 잘못된 토큰에 대한 구체적인 에러를 발생시킵니다.
  • Loading branch information
jihwooon committed Mar 18, 2024
1 parent cf616e6 commit b8b5aab
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 2 deletions.
5 changes: 5 additions & 0 deletions server/src/cartItems/application/cartItem-list.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,16 @@ import { StatusCodes } from 'http-status-codes';

import { validateToken } from 'src/users/jwt/jwt.provider';

import jwt from 'jsonwebtoken';

import type CartItem from '../domain/cartItem';
import { findCartItemWithBook } from '../domain/cartItem.repository';

export const getCartItems = async (accessToken: any, selectedId: number[]) => {
const { userId } = validateToken(accessToken);
if (userId instanceof jwt.JsonWebTokenError) {
throw new HttpException('잘못된 토큰 입니다.', StatusCodes.BAD_REQUEST);
}
const cartItems = await findCartItemWithBook(userId, selectedId);
if (cartItems.length === 0) {
throw new HttpException('장바구니가 내 도서 정보가 존재하지 않습니다.', StatusCodes.NOT_FOUND);
Expand Down
1 change: 1 addition & 0 deletions server/src/cartItems/web/cartItem-list.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
};

Expand Down
10 changes: 8 additions & 2 deletions server/src/users/jwt/jwt.provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
};

0 comments on commit b8b5aab

Please sign in to comment.