사고쳤어요
[Node.js] try-catch로 JWT 에러 예외 처리하기 본문
const token = jwt.sign(
{
id: loginUser.id,
email: loginUser.email,
},
process.env.PRIVATE_KEY,
{
expiresIn: "5m",
issuer: "minje",
}
);
다음과 같이 유효기간을 5분으로 설정하고 토큰을 발급하였다.
그리고 토큰 발급 5분이 지난 뒤 요청을 하는 경우 에러가 발생하는 것을 볼 수 있다.
이렇게 jwt가 만료되는 경우 에러가 발생하므로 예외 처리를 진행해주어야 한다. (TokenExpiredError)
또한 jwt가 잘못 입력된 경우에도 에러가 발생하므로 예외 처리를 진행해주어야 한다. (JsonWebTokenError)
function decodeJWT(req) {
try {
const token = req.headers.authorization;
const decodedToken = jwt.verify(token, process.env.PRIVATE_KEY);
return decodedToken;
} catch (err) {
return err;
}
}
const addLike = (req, res) => {
const { likedBookId } = req.body;
const token = decodeJWT(req);
if (token instanceof jwt.TokenExpiredError) {
return res.status(StatusCodes.UNAUTHORIZED).json({
message: "로그인 세션이 만료되었습니다. 로그인이 필요합니다.",
});
} else if (token instanceof jwt.JsonWebTokenError) {
return res.status(StatusCodes.UNAUTHORIZED).json({
message: "잘못된 토큰입니다.",
});
}
}
try-catch를 사용해서 decodeJWT() 함수에서 에러가 발생하는 경우 에러를 리턴해주었다.
그리고 decodeJWT()를 사용하는 API에서 에러가 리턴된 경우 그 instance가 무엇인지를 파악하여 예외 처리를 진행해주었다.
'웹 풀스택' 카테고리의 다른 글
JavaScript의 함수와 일급객체 (0) | 2025.03.27 |
---|---|
[Node.js] Faker를 활용하여 랜덤 데이터 사용해보기 (0) | 2025.03.26 |
[도서 쇼핑몰] Node.j JWT 적용하기 (0) | 2025.03.24 |
[Node.js] Promise와 비동기 처리 (0) | 2025.03.19 |
[도서 쇼핑몰] Node.js - 주문 API 구현(mysql 비동기 처리) (0) | 2025.03.18 |