JWT 토큰 발행_Network

miin·2022년 4월 22일
0

Network

목록 보기
11/13
post-thumbnail

토큰 발급하기

  • 라이브러리 설치
    npm i jsonwebtoken
  • 토큰을 인증하기위한 비밀 키가 필요하다
//.env
PORT = 3000 
JWT_SECRET="MySecretKey" //시크릿키
JWT_EXPIRE="48h" // 유효기간
JWT_SUBJECT="" // 토큰 제목
JWT_ISSUER="" //발급자
  • 첫번째 파라미터(토큰에 넣을 데이터) 두번째(시크릿키), 세번째(옵션), 네번째(콜백함수)
const jwt = require('jsonwebtoken');
const token = jwt.sign({ foo: 'bar' }, 'secret-key', { expiresIn: '7d' }, (err, token) => {
    if(err) {
        console.log(err);
        return;
    }
    console.log(token);
});
  • 함수 생성
const jwtSecret = process.env.JWT_SECRET;
const jwt = require('jsonwebtoken');

//토큰 초기화
function _JWT(secret) {
  if (!(this instanceof _JWT)) {
    return new _JWT(secret);
  }

  this.secret = secret;
}
/**
 * JWT 토큰 생성
 * @param {any} payload 
 * @returns {string} token
 */

//토큰 등록
//payload: 전송되는 데이터
  _JWT.prototype.register = function (payload) {
    return new Promise((resolve, reject) => {
            jwt.sign(
                payload,
                this.jwtSecret,
                {
                  expiresIn: process.env.JWT_EXPIRE,
                  issuer: process.env.JWT_ISSUER,
                  subject: process.env.JWT_SUBJECT,
                }, (error, token) => {
                    if(error) reject(error);
                    resolve(token);
                }
            );
        }
    );
};

//토큰 디스크립트
_JWT.prototype.verify = function (token) {
  return new Promise((resolve, reject) => {
    jwt.verify(token, this.secret, (err, decoded) => {
      if (err) reject(err);
      resolve(decoded);
    });
  });
};

exports.generateToken = generateToken;

0개의 댓글