[TIL] JWT를 이용하여 로그인 후 게시글 등록하기

·2022년 9월 11일
0

TIL

목록 보기
8/10

오늘 공부 중 가장 헤맸었던 jwt을 이용한 로그인 이후, 인증된 유저의 게시글 등록하는 로직을 기록해보려한다.

주제 : JWT를 이용하여 로그인 후 게시글 등록하기

먼저 해당 기능을 구현하기 위해서는
1) 기존에 로그인 성공한 유저에게 토큰이 있어야 했고
2) 동일한 유저의 email, pw, 토큰을 들고 로그인 시도를 해야했다.
3) 이후 토큰의 유효성 검사를 한 후 Posting 기능을 이용할 수 있도록 로직을 짜야 했다.

기존 파일에 이미 1)과 유저의 포스팅 작성기능까지는 구현이 되어있는 상태였기 때문에, 토큰을 위주로 진행했다.

우선 jwt 일치 확인을 위해 새로운 파일을 생성했다.
작성한 내용은 아래와 같은데,

///1///
const jwt = require('jsonwebtoken'); 
const KEY = process.env.SECRETKEY; 
///2///
const validateToken = async (req, res, next) => {
    try{
        const inputToken = req.headers.token;
        const decoded = await jwt.verify(inputToken, KEY);
        next();
    }
///3///
    catch(err){
        return res.status(400).json({ message: "Invalid Token" });
    }
}
///4///
module.exports = {validateToken}
  1. jwt , .env의 key를 import 한다. 이 때 key는 토큰을 만들 때 사용한 secretKey가 들어간다.
  2. req.header에 받아온 토큰과 import한 secretkey를 이용해 jwt.verify()를 실행한다.
    jwt.verify()를 이용해서 유효성 검사를 실시하는데, 해당 함수는 비동기함수이기 때문에 await처리를 해준다.
    위의 코드가 다 실행되면 next함수로 인해 다음 함수가 실행된다.
  3. 위의 try{...} 에서 err발생시, 개발자에게 나타낼 상태코드와 메시지를 넣는다.
  4. validateToken함수를 export해준다.

라우터 파일에 지정한 next함수는 아래와 같았으므로, 컨트롤러로 이동한다.

router.post('/postup', auth.validateToken , postController.createPost);

이후 controller, dao 단에서는 포스팅작성과 동일하기 때문에
별도로 수정을 진행하지 않았다.

위의 내용까지만 구현해도 통과였지만,
클라이언트가 소지한 토큰이 실제로 해당 유저의 토큰인지 검증이 필요하다고 느꼈다
해당 기능구현은 이번주에 진행해보아야겠다 -!!

profile
병아리 개발자입니다 🐥 틀린 정보가 있다면 말씀해주세요!

0개의 댓글