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)
}