jm_p_op
jsonwebtoken - JWT 본문
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)
}
'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 |