들어오는 모든 요청마다 jwt 검증을 해볼 것이다.
verifyToken.js
const jwt = require('jsonwebtoken');
const verifyToken = (req, res, next) => {
const token = req.headers['authorization']; // 토큰을 헤더에서 가져옵니다.
if (!token) {
return res.status(403).send({ message: '토큰이 제공되지 않았습니다.' });
}
jwt.verify(token, SECRET_KEY, (err, decoded) => {
if (err) {
console.log(err);
return res.status(401).send({ message: '토큰이 유효하지 않습니다.' });
}
req.user = decoded; // 토큰이 유효하면 decoded 정보를 req.user에 저장합니다.
console.log("AccessToken 유효")
next(); // 다음 미들웨어 혹은 라우터 핸들러로 넘어갑니다.
});
};
module.exports = verifyToken;
SECRET_KEY는 사용자에게 보이지 않는 곳에 잘 숨겨줘야 한다.
위 코드는 jwt를 검증하는 미들웨어로서의 veryftToken.js이다.
미들웨어를 사용하면 response와 request 사이에 특정한 작업을 수행할 수 있으며, next()를 이용해 다음 미들웨어로 넘어갈 수 있다.
app.js에 다음과 같이 추가한다.
var boardRouter = require('./routes/board/board_list'); //board_list.js에 연결
var verifyToken = require('./middlewares/verifyToken'); //verityToken.js에 연결
app.use('/api/board', verifyToken);
app.use('/api/board', boardRouter);
app.use('/api/board', verifyToken); <= 얘를 먼저 쓴다.
/api/board에 들어오는 모든 요청에 대해 verifyToken을 통해 jwt를 검증하게 하였다.