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이 저장됩니다.
Sever에서 req.session으로 참조하여 출력하여도 저장된 것을 볼 수 있습니다.
exports.check_session = function(req){
console.log(req.session.user)
}
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 |
---|