본문 바로가기

About/MongoDB

[MongoDB] Session 저장/삭제하기 - 로그인/로그아웃 구현(Node.js, express-session,Mongoose)

Node.js에서 express-session과 mongoose를 이용하여 login session을 저장하고, 로그아웃 시 삭제하는 예제이다.

 

1. 모듈 설치

 

우선 express-session, mongoose, mongoose-session을 설치하여야 합니다.

 

express-session 설치
npm install -s express-session
mongoose 설치
npm install mongoose
mongoose-session 설치 
npm install mongoose-session

 

2. express-session, mongoose 설정

 

app.js 에서 express-session과 mongoose를 불러옵니다.

var express_session = require('express-session');
var mongoose = require('mongoose');

먼저 mongoose를 이용하여 MongoDB와 연결해줍니다.

//MongoDB Connect
mongoose.connect('MongoDB Address', {
  useNewUrlParser: true,
  auth: {
    authdb: 'admin',
    user: 'squidkim',
    password: 'welcome'
  },
}, function (err) {
  if(err){
    console.log(err);
  }
  else{
    console.log('Data DB Connected.');
  }
})

'MongoDB Address'에 MongoDB 주소를 입력하면 됩니다. 나머지 설명 및 옵션은 생략

 

그 후 연결된 Mongoose를 이용하여 express-session을 설정합니다.

// session
app.use(express_session({
  secret: "@XDF@#$#R!@!@!@##!@", 
  resave: false, 
  saveUninitialized: false,
  store:require('mongoose-session')(mongoose), // session 저장 장소 (Mongoose를 이용하여 Mongodb로 설정)
  cookie:{maxAge:(3.6e+6)*24} // 24시간 뒤 만료(자동 삭제)
}));

설정 옵션은 다음과 같다.

  • secret : 암호 키 저장, 이 키를 통하여 Session id를 암호화한다.
  • resave :  재저장을 계속 할 것인지 정보, 세션에 변화가 없어도 계속 저장한다는 옵션이다.(false 권장)
  • saveUninitialized : True일 경우 세션 저장 전 unitialized 상태로 미리 저장한다
  • store : 세션 데이터의 저장소 설정 (위 코드에서는 mongoose-session을 통하여 MongoDB에 저장)
  • cookie { maxAge } : 세션 저장 만료 시간 설정 (위 예제에서는 24시간으로 설정)

 

3. Session 저장 (Login 예제)

 

session 저장 시 다음과 같이 저장하면 됩니다.

req.session.xxx = { 저장할 정보 }

 

다음은 비밀번호를 확인하여 Session을 저장하는 코드입니다.

//비밀번호를 확인하여 세션 정보 저장
if(await check_password(result,password)) {
    // 세션 저장
    req.session.user = { 
        user_id: id,
        user_name: name,
    }
}

다음과 같은 코드를 실행하면 MongoDB에 Login session이 저장됩니다.

MongoDB에서 Session 저장 정보확인

Sever에서 req.session으로 참조하여 출력하여도 저장된 것을 볼 수 있습니다.

exports.check_session = function(req){
    console.log(req.session.user)
}

Session 정보 출력

 

4. Session 삭제 (Logout 예제)

 

Session 삭제 시 express-session의 destroy() 함수를 이용하면 됩니다.

req.session.destroy(function(err){})

다음은 Logout 예시 코드 입니다.

 

router.get('/logout', async function (req, res, next) {
    var session = req.session;
    try {
        if (session.user) { //세션정보가 존재하는 경우
            await req.session.destroy(function (err) {
                if (err)
                    console.log(err)
                else {
                  res.redirect('/');
                }
            })
        }
    }
    catch (e) {
      console.log(e)
    }
  res.redirect('/');
})

Node.js의 router(index.js)에서 logout을 GET 요청받은 경우 session을 삭제(destroy)하고
클라이언트를 첫 페이지('/')로 이동시킵니다.

 

session을 삭제하게 되면 MongoDB에서도 삭제된 것을 확인할 수 있습니다.

또한 Express-session 설정 시 만료 시간을 24시간 뒤로 하였기 때문에 DB에서 expires 시간이 지나게 되면

자동으로 Sesssion이 삭제됩니다.

"_expires" : ISODate("2020-12-29T04:43:35.021Z") //2020-12-29일 04:43분 삭제

 


다양한 모듈을 이용하여 Session을 저장하고, 삭제하며 로그인&로그아웃을 구현해보았습니다.

 

 

'About > MongoDB' 카테고리의 다른 글

[MongoDB] Mongoose-auto-increment (자동 증가 번호)  (0) 2020.12.09