<PassportJS> express-session

자 우리가 로그인 기능을 구현하기 전에 세션에 대한 개념을 한번 알아봅시다. 세션은 쿠키와 비슷하지만 쿠키는 브라우저에서 세션은 서버에서 관리한다는 면에서 다릅니다. 세션이 쿠키보다 보안적으로 우수하므로 로그인과 같은 작업에 보통 사용합니다. 세션을 사용하기 위해서 expressjs에서는 express-session을 추천하고 있습니다.

설치

%npm insatll express-session을 터미널에 입력

app.js

session을 사용하기 위해서 option도 전달해주어야하는데요. 필요한 경우 아래와 다르게 설정해도 되지만 그렇지 않다면 동일하게 해주면 좋습니다.

  • secret
    session에 id를 보낼때 id를 암호화하기 위한 랜덤 문자열입니다. 다른 사람이 보더라도 어떤 숫자인지 알기 어렵습니다. 특히나 랜덤 문자열을 모르면 해독하기 어렵습니다. 그래서 랜덤 문자열은 노출시켜선 안됩니다. .env에 넣어야겠죠?
import dotenv from 'dotenv';
import session from 'express-session';

dotenv.config();

app.use(session({
  secret: process.env.SECRET,
  resave: false,
  saveUninitialized: true
}));

videoController 예제1

이제 session을 사용할 수 있는데요. session은 req의 property로 추가되게됩니다. 예제로 '/'에 접속했을 때 session을 출력해보겠습니다.

export const home = (req, res) => {
  console.log(req.session);
  res.send('home');
}

이제 클라이언트가 home에 요청을 보내면 콘솔에서 아래와 같이 확인할 수 있습니다.

videoController 예제2

export const home = (req, res) => {
  if(req.session.num === undefined){
    req.session.num = 1;
  }else{
    req.session.num++;
  }
  console.log(req.session.num);
  res.send('home');
}

위와 같은 코드를 이용할 경우에 사용자가 home에 접근할때마다 req.session.num이 1씩 커지게 되고 결국은 접속횟수를 출력하게 될겁니다. 서버를 재시작하면 session에 저장된 값은 사라지게 됩니다. 다시 1부터 시작하겠죠. 만약에 이 값을 서버의 재시작과 관계없이 유지시키고 싶다면 데이터베이스나 파일에 저장해야합니다.

좋은 웹페이지 즐겨찾기