혼자 적어보는 노트

[Node.js] 중복 로그인 검사 미들웨어 / middleware 본문

NodeJS

[Node.js] 중복 로그인 검사 미들웨어 / middleware

jinist 2022. 3. 21. 02:42

 

로그인이나 로그아웃, 회원가입 등

서버에 요청을 보냈을 때 바로 응답을 하지 않고

먼저 검증을 할 수 있는 미들웨어를 만들어 보자.

 

로그인요청을 할 경우 로그인이 되어있지 않은 상태여야 하고

로그아웃 요청을 할 경우 로그인을 한 상태여야 한다.

또한 로그인 상태를 체크하는 route들이 많아질 수 있기  때문에

반복적인 코드를 줄이기 위해 미들웨어를 추가로 적용하는 것이 좋다.

 

 


 

📄 알아야 할 것

const express = require('express');
const router = express.Router();

router.get('/', function(req, res) {
  res.send('Hello world!');
});

module.exports = router;

 

router의 get, post, put, delete등의 메서드 안에는 두번째 인자부터는 미들웨어를 나타낸다.

즉, 여러개를 입력할 수 있다.

그리고 미들웨어들은 req, res, next를 인자로 가지게된다.

 

router.get('/', 미들웨어1, 미들웨어2, 미들웨어3);

미들웨어 1에서 next()를 호출하면 미들웨어2가 실행되고

미들웨어2에서 next()를 호출하면 미들웨어3이 실행된다.

 

* 여기서 next()는 괄호 안에 내용 없이 호출 시 다음 미들웨어로 넘어가는 기능을 가지고 있다.

 


 

🏠 미들웨어 생성하기

 

routes/middlewares.js

exports.isLoggedIn = (req, res, next) => {
  if (req.isAuthenticated()) {
    next();
  } else {
    res.status(401).send("로그인이 필요합니다.");
  }
};

exports.isNotLoggedIn = (req, res, next) => {
  if (!req.isAuthenticated()) {
    next();
  } else {
    res.status(401).send("로그인 상태에서 접근할 수 없습니다.");
  }

 

미들웨어가 될 함수를 middlewares파일에 작성해주고 각각 exports 해주었다.

조건에 부합할경우 next()를 사용하여 다음 미들웨어로 넘어가게 처리를 해준다.

 

req.isAuthenticated : passport의 현재 인증이 되었는지 체크 해주며 true/false를 반환한다

 

const express = require('express');
const router = express.Router();
const { isLoggedIn, isNotLoggedIn } = require('./middlewares');

router.post('/login', isNotLoggedIn, function(req, res) {
  //login route 작성
});

router.post('/logout', isLoggedIn, function(req, res) {
  //logout route 작성
});

module.exports = router;

2번째 인자에 생성한 미들웨어를 추가해주면 된다.

왼쪽부터 실행되기 때문에 해당 미들웨어를 실행하고

조건에 부합하면 다음 미들웨어가 실행되는 방식이다.

Comments