기억 휘발 방지소

[Node.js] jsonwebtoken 본문

Web/Node.js

[Node.js] jsonwebtoken

choice91 2021. 10. 12. 23:36
728x90
반응형

📌 jsonwebtoken

jsonwebtoken은 json 웹 토큰을 편리하게 생성할 수 있는 패키지이다.

오늘(10월 12일)을 기준으로 700만건이 넘는 다운로드 수를 갖는 패키지이다.

 

📌 설치

아래 명령어로 설치할 수 있다.

npm i jsonwebtoken

 

📌 토큰 생성

토큰은 sign 메소드로 생성할 수 있다.

jwt.sign(payload, secretOrPrivateKey, [options, callback])
const jwt = require("jsonwebtoken");
const payload = {
  id: user.id,
  email: user.email,
  username: user.username,
};
const secretKey = "secret";
const options = { expiresIn: "1h" };
const token = jwt.sign(payload, secretKey, options);

jwt.sign의 매개변수로 payload, secret key, option을 차례대로 넣어준다.

옵션에 expiresIn은 토큰의 만료시간이다.

 

📌 토큰의 유효성 확인

토큰은 verify 메소드로 유효성을 확인할 수 있다.

jwt.verify(token, secretKey, [options, callback])

jwt 유효성 검증을 미들웨어로 만들어서 jwt 인증이 필요한 API에 미들웨어로 등록

// auth.js
const jwt = require("jsonwebtoken");

exports.verifyToken = async (req, res, next) => {
  try {
    const [authType, authToken] = req.headers.authorization.split(" ");
    req.decoded = jwt.verify(authToken, "secretKey");
    return next();
  } catch (error) {
    if (error.name === "TokenExpiredError") {
      return res.status(419).json({ code: 419, message: "토큰 만료" });
    }
    return res.status(401).json({ code: 401, message: "유효하지 않은 토큰" });
  }
};
728x90
반응형