jm_p_op

jsonwebtoken - JWT 본문

Node.js/Express

jsonwebtoken - JWT

jm_p_op 2024. 4. 23. 19:35

modules/jwt.js

  • sign은 비동기
  • verify는 동기(비동기로 권한 없는 친구에게 DB와의 통신량 늘릴필요 없음)
  • expireIn : /ms단위
  • verify : error에 따른 response를 쓰는 곳에서 만들지 않고, 안에 만들어 쉽게 쓸수 있도록 제작
  • Authorization : str = "Bearer {{TOKEN}}"
    • split 사용하여 오류 나는것은 제거 
const randToken = require('rand-token');
const jwt = require('jsonwebtoken');


module.exports = {
    sign: async (user) => {
        const payload = {
            id: user.id,
            email: user.email
        };
        const result = {
            token: jwt.sign(payload,process.env.PASSWORD_SECRET_STRING,
            {expiresIn:process.env.JWT_REFRESH_EXPIRATION}),
            refreshToken: randToken.uid(256)
        };
        return result;
    },
    verify: (auth) => {
        let [_,token]=auth.split("Bearer ")
        if (!token){
            return {
                "response": 400,
                "error":"wrong token"
            }
        }
        let decoded;
        try {
            decoded = jwt.verify(token, process.env.PASSWORD_SECRET_STRING);
        } catch (err) {
            if (err.name === 'TokenExporedError') {
                console.log('expired token');
                return {
                    "response":419,
                    "message":"토큰이 만료되었습니다"
                }

            } else if (err.name === 'JsonWebTokenError') {
                console.log('invalid token');
                return {
                    "response":401,
                    "message":"유효햐지 않은 토큰입니다"
                }
            } else{
                console.log("token hidden error")
                console.log(err)
                return {
                    "response":400
                }
            }
        }
        return decoded;
    }
}

router/user.js

const jwt = require("../modules/jwt")
//token 받기
jwt.sign(req.body).then(response=>{
console.log(response)
})
//token 확인하기
login_user=jwt.verify(auth)
if (login_user.response){
//인증실패
res.send(login_user)
}
else{
console.log(login_user)
}

 

 

틀 참고 : https://velog.io/@hyojhand/Refresh-Token-%EB%B8%94%EB%9E%99-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EB%8F%84%EC%9E%85%EA%B8%B0

'Node.js > Express' 카테고리의 다른 글

FK  (0) 2024.04.28
SQL ionjection 공격 - Sequelize의 경우  (0) 2024.04.25
DB - attributes 데이터 한정하기,보안  (0) 2024.04.23
DB 보안 - 해시 함수,hash 공격,salt,password 암호화  (0) 2024.04.22
CRUD  (0) 2024.04.18