[Node.js] express-Session을 이용한 로그인 구현
본문 바로가기
BackEnd/Node.js

[Node.js] express-Session을 이용한 로그인 구현

by liveloper jay 2021. 12. 10.

express - session 이란?

 express-session은 세션 관리 기능을 제공하는 Node.js의 express 프레임워크 미들웨어 모듈입니다. 세션을 사용하면 여러 요청 및 웹 애플리케이션과의 상호 작용에서 사용자별 데이터를 저장하고 유지할 수 있습니다. 그럼 세션이란 무엇일까요?

 세션은 특정 사용자로부터 들어오는 일련의 요청을 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술입니다. 이는 쿠키와 상당히 유사한데, 쿠키는 사용자 정보 파일을 사용자 컴퓨터 메모리에 저장하는 것이고 세션은 사용자 정보 파일을 서버 측에서 관리한다는 차이점이 있습니다.  

 express-session을 사용하면 세션을 관리하는 프로세스를 단순화할 수 있습니다. 이는 세션을 만들고 구성하고 조작할 수 있는 사용하기 쉬운 API를 제공합니다.  또한 저장과 검색 및 세션 만료를 포함한 세션 데이터 처리의 복잡성을 추상화합니다.

 

1. express-session 구성

먼저 express-session은 다음과 같이 설치할 수 있습니다.

npm install express-session

설치가 완료되면 다음과 같이 세션의 미들웨어를 구성할 수 있습니다. 

const express = require('express');
const session = require('express-session');
const FileStore = require('session-file-store')(session);

const app = express();

app.use(session({ 
  secret: 'keyboard cat',   // 세션을 암호화
  resave: false,            // 세션을 항상 저장할지 결정 (false를 권장)     
  saveUninitialized: true,  // 초기화 되지 않은채로 스토어에 저장할지를 결정
  store: new FileStore()    // 데이터를 저장하는 형식
}));

 

 

 

 

 

 

2. express-session을 이용한 로그인/ 아웃 예시

로그인 페이지에서 로그인을 요청할 경우 post 메서드를 이용하여 /login 경로에서 사용자 이름과 비밀번호가 일치하는지를 확인합니다. 이후 자격 증명이 올바르면 세션에서 loggedIn플래그를 설정하고 원하는 경로로 리디렉션해줍니다. 만약 로그인이 실패할 경우 로그인 실패를 알려주고 다시 로그인 페이지로 리디렉션 해줍니다.  아래는 간략한 session 로그인 예시입니다.

router.post('/login', (req, res) => {
  const { username, password } = req.body;

  if (username === '{username}' && password === 'password') {
    req.session.loggedIn = true;
    res.redirect('/post');
  } else {
    res.send('<script>alert("아이디 또는 비밀번호가 잘못되었습니다.");location.href="/{login page}"</script>'););
  }
});

 

로그 아웃을 시도하는 경우 /logout으로 요청을 보내 세션을 destroy하고 사용자를 로그인 페이지로 리디렉션합니다.

app.get('/logout', (req, res) => {
  req.session.destroy();
  res.redirect('/login');
});

 

이상으로 Session을 이용한 간단한 로그인을 구현해보았습니다. 여기 있는 예시코드는 express-session을 보여주기 위한 간단한 예시 코드입니다. 실제 구현시에는 password 암호화 및 다른 인증 방식을 추가하여 안전하게 로그인을 수행하는 것을 추천드립니다.

댓글