상권's

TIL 58 (북담 서버 리팩토링1) 본문

~2022 작성 글/TIL

TIL 58 (북담 서버 리팩토링1)

라마치 2022. 2. 12. 23:45

서버 리팩토링


1. 서버 jwt 쿠키 모듈화 하기

쿠키 만료인지 여부 확인하는 모듈을 만들어 봤습니다.

먼저, jwt.verify에서 try/catch문을 이용해 만료된 토큰의 여부를 확인했습니다.

 

마주한 에러 : 쿠키가 만료되었거나 잘못된 쿠키의 경우 isAuthorized에서 catch로 return res 을 해도 다시 logout으로 넘어왔을 때 decodedData 이후 코드 진행에 에러가 발생하고, 이미 res를 했기때문에 클라이언트에 보낸 이후에 headers 세팅을 불가능하다는 에러가 발생했습니다.

해결방법 : try/catch 예외처리를 학습하면서 리팩토링을 하고 있지만 너무 기본적인 거에서 오류를 냈습니다. 해당 문제는 isAuthorized catch에서 throw error를 해줌으로써 jwt.verify에 대한 에러를 logout에서 처리할 수 있었습니다.


//logout

logout: async (req, res) => { // test done
    try {
      const cookie = req.cookies.jwt;
      if (!cookie) return res.status(401).json({ message: '로그인 유저가 아닙니다.' });
      let decodedData = isAuthorized(cookie, res)
      const findUser = await UserModel.findOne({
        where: { id: decodedData.id, userId: decodedData.userId }
      });
      if (!findUser) return res.status(400).json({ message: '유저가 없어 로그아웃에 실패했습니다.' });
      res.clearCookie('jwt').status(200).json({ message: '로그아웃 되었습니다.' });
    } catch(error) {
      // console.log(error)
      if(error.name === 'TokenExpiredError') return res.status(401).json({ message: '토큰 만료로 로그인이 필요합니다.', error : error});
      else {
        return res.status(400).json({ message: '로그아웃에 실패했습니다.', error : error });
      }
    }
  },
// jwt 확인하는 모듈

const jwt = require('jsonwebtoken');

module.exports = {
  isAuthorized: (cookie) => {
    try {
      const token = jwt.verify(cookie, process.env.ACCESS_SECRET);
      return token
    } catch (error) {
      throw error
    }
  },
};

위의 코드가 jwt 모듈을 나누고 logout에 반영한 코드입니다.

try/catch를 나누는 부분에서 기존에 예외처리를 catch문으로 옮기는 과정이 시간이 소요되었습니다. if(!cookie), if(!findUser) 부분을 catch로 넘기는 처리는 조금 더 학습해봐야 할 것 같습니다. 

 

생각했던 거보다 시간이 오래 걸리고, 전체 api에 반영하지 못해 아쉽지만 내일 다시 열심히 해서 전체적으로 리팩토링해보겠습니다.

 

추가적으로 req.params와 jwt의 내부의 id 값이 같은 지 여부를 확인하고 article 생성, 삭제, 수정, 회원정보 수정, 탈퇴 부분에 대해서 처리를 고민해볼 예정입니다. 

'~2022 작성 글 > TIL' 카테고리의 다른 글

TIL 60 (복습)  (0) 2022.02.16
TIL 59 (북담 서버 리팩토링2)  (0) 2022.02.13
TIL 57 (복습)  (0) 2022.02.10
TIL 56 (복습)  (0) 2022.02.09
TIL 55 (복습)  (0) 2022.02.06
Comments