2015년 7월 14일 화요일

Node.js + Express 4] session sample


Express 4 에서는 3에서와는 다르게 session을 사용함
로그인시 세션에 사용자 정보를 설정하여 다시 로그인 호출시 로그인 성공 화면으로 넘어가도록 구현한 샘플

1. 설치
sudo npm install express-session

2. 사용
- app.js
var express = require('express');
var session = require('express-session');

var routes = require('./routes/index');
var users = require('./routes/users');
var member = require('./routes/member');
var personal = require('./routes/personal');
var office = require('./routes/office');

var app = express();

app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
}));

app.use('/', routes);
app.use('/users', users);
app.use('/member', member);
app.use('/personal', personal);
app.use('/office', office);


- member.js
var CONSTS = require('./consts');
var express = require('express');
var router = express.Router();
var MemberProvider = require('./db/db-member.js').MemberProvider;

var app = express();
var memberProvider = new MemberProvider();

// 로그인 화면 호출
router.get('/loginc', function(req, res, next) {
    // 이미 로그인 여부를 세션에 user_id가 있는지로 확인
    var userInfo = req.session.userInfo;
    var user_id = '';
    try {
        user_id = userInfo.user_id;
    } catch (e) { }
    console.log('member - session : ' + userInfo);
    if (user_id == '') {
        res.render('./member/login', {
            title: '로그인',
            logintype: CONSTS.MEMBER_TYPE.OFFICE});
    } else {
        res.redirect('/home' + userInfo.mem_type);
    }
});

// 로그인 실행
router.post('/login', function(req, res, next) {
    console.log(req.body);
    var vId = req.body.user_id;
    var vPwd = req.body.password;
    var datas = [vId, req.body.mem_type];
    memberProvider.selectSingleQueryByID("selectInfo", datas, function(err, memberInfo) {
        console.log(memberInfo);
        var rtnDatas = CONSTS.getErrData('0000');
        if (memberInfo == null) {
            rtnDatas = CONSTS.getErrData('E001');
        } else if (memberInfo.user_password != vPwd) {
            rtnDatas = CONSTS.getErrData('E002');

        } else {
            // 세션에 값을 설정함.
            var userInfo = {
                user_id: memberInfo.user_id,
                mem_type: memberInfo.mem_type};
            req.session.userInfo = userInfo;
        }
        console.log(rtnDatas);
        res.send(rtnDatas);
    });
});

// 로그아웃
router.get('/logout', function(req, res, next) {
    // 세션을 삭제함.
    req.session.destroy(function(err) {
        res.redirect('/');
    });
});


이 글은 Evernote에서 작성되었습니다. Evernote는 하나의 업무 공간입니다. Evernote를 다운로드하세요.

댓글 없음:

댓글 쓰기