[Node.js] 검증된 사람만 게시글이 보이게 설정

채연·2023년 6월 18일
0

Node.js

목록 보기
9/16

인증이 된 사람만 Post를 가져갈 수 있게 만들기

클라이언트에서 요청을 하면, 인증 값이 헤더의 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();
  });
}

  • key 값을 넣지 않았을 때, Unauthorized가 뜨는 모습

  • key 값을 넣으니 posts의 값이 보인다
profile
Hello Velog

0개의 댓글