V-logue

[Node.js] jwt malformed 본문

Error

[Node.js] jwt malformed

보그 2022. 7. 14. 14:16

기존에 만들었던 로그인 기능에서 jwt malformed에러가 계속해서 발생해서,

이를 수정하게 됐다.

 

기본적으로 jwt malformed에러는

 

token값이 유효하지 않거나, Null  혹은 이상한 값일 때 발생하는데,

 

내 코드를 살펴보면,

const { authorization } = req.headers;
    console.log("헤더입니다: " , authorization)
    if (!authorization && authorization === null && authorization === undefined){
      res.status(401).json({ errorMessage: "토큰의 값이 유효하지 않습니다."}) 
      return next();
    }

    if (authorization.split(" ").length !== 2) {
      res.status(400).json({ errorMessage: "Token is not a Bearer" });
    }

    const [tokenType, tokenValue] = authorization.split(" ");

    if (tokenType !== "Bearer") {
      return res.status(401).json({ errorMessage: "로그인이 필요한 기능입니다." });
    }

    const { userId } = jwt.verify(tokenValue, process.env.JWT_SECRET_KEY);

이런식으로 되있는데, 에러는

if (!authorization && authorization === null && authorization === undefined){
      res.status(401).json({ errorMessage: "토큰의 값이 유효하지 않습니다."}) 
      return next();
    }

바로 이 지점에서 발생한다.

 

사실 기존에 계속해서 사용해 왔던 거라, 에러가 이제와서 저렇게 발생하는 것도

새삼스럽다고 느끼던 중 토큰이 headers를 통해 들어온 값으로 사용하는거라서 헤더에 문제가

있을 것이라고 생각했다.

 

아니나 다를까 프론트쪽에서 네트워크를 살펴보니, 헤더에 token값이 담겨 있지 않아서

발생한 문제였다.

 

에초에 req.headers에 Bearer token이 존재하지 않았기 때문에 발생한 에러였다.

jwt.io를 통해 봐도 유효하다고 표시된걸 확인한 후 였기에 확신한 거였고, 혹시나 헤더에도

토큰이 담겨있다면 3개의 블록으로 이루어진 값으로

token이 생성됐는지 확인하는걸 추천한다.

Comments