클라이언트에서 요청을 하면, 인증 값이 헤더의 authorization에 담겨있다.
const authHeader = req.headers['authorization']
위의 코드와 같이 값을 얻어오면 되는데,
일반적으로 값은 Bearer asdfjdfsdfasljdfsadkj <- 와 같이 들어있다.
하지만 우리는 앞의 Bearer은 필요하지 않고 뒤의 부분만 필요하다..!
따라서 split을 통하여 토큰을 얻어온다
const token = authHeader && authHeader.split(' ')[1]
이렇게 얻은 token이 있으면, 다음으로 넘기고 없으면 401 에러를 띄우는 코드를 짜보자!
첫째로 게시물들을 정의해준다.
const posts = [
{
id: 0,
name: "chaeyeon",
},
{
id: 1,
name: "sihyeon",
},
{
id: 2,
name: "suyeon",
},
];
/post 경로로 중간에 middleware를 넣어준다.
app.get("/posts", authMiddleware, (req, res) => {
res.json(posts);
});
아까 위에서 했던 개념 적용하여, headers에서 authorization 추출하여 주고,
token이 존재하지 않는다면 401 error
존재한다면, jwt의 verify를 이용하여 user를 요청에 넣어준 후, next 시켜준다.
function authMiddleware(req, res, next) {
const authHeader = req.headers["authorization"];
const token = authHeader && authHeader.split(" ")[1];
if (token == null) return res.sendStatus(401);
jwt.verify(token, process.env.SECRET_KEY, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
}