node.jsでexpress+PostgreSQL+session-expressを利用する
目次
現在の環境
・CentOS6.8
・PostgreSQL9.6
・node.js7.10.0
インストール
$ npm install –save express-session
$ npm install –save connect-pg-simple
セッション余のテーブルを展開する
$ psql -U datauser z_event_db < node_modules/connect-pg-simple/table.sql
app.js
var session = require(‘express-session’);
var pgSession = require(‘connect-pg-simple’)(session);
app.use(session({
store: new pgSession({
pg : pg,
conString : 'postgres://hogeuser:hogepass@localhost:5432/xxx_db',
crear_interval : 60 * 60 // 保存期間(sec)
}),
secret : 'secret', // Cookieの暗号化に利用するキー
resave : false, // true:セッション内容に変更がない場合にも保存する
saveUninitialized : false, // true:新規にセッションを生成して何も代入されていなくても値を入れる
rolling : true, // true:アクセスの度に、有効期限を伸ばす
cookie : {
httpOnly : false, // cookieへのアクセスをHTTPのみに制限しない
maxAge : 60 * 60 * 1000 // クッキーの有効期限(msec)
}
}));
index.js
Bingingが何故かうまくいかなくて、SQL作ってます(^^;
var express = require('express');
var router = express.Router();
/* Session */
var loginCheck = function( req, res, next ){
if( req.session.user ) {
next();
} else {
res.redirect('login');
}
};
/* GET home page. */
router.get('/', loginCheck, function(req, res, next) {
res.redirect('login');
// res.render('index', { title: 'Express' });
});
module.exports = router;
loginchk.js
var express = require('express');
var router = express.Router();
var pg = require('pg');
/* GET home page. */
router.post('/', function(req, res, next) {
var strUser = req.body["user"];
var strPass = req.body["passwd"];
console.log( "user:" + strUser + " pass:" + strPass );
var con = "tcp://datauser@localhost:5432/z_event_db";
pg.connect( con, function( erro, client ) {
var qStrSel = 'SELECT login_name, login_passwd FROM d_eventor WHERE';
qStrSel += " login_name='" + strUser + "'";
qStrSel += ' AND';
qStrSel += " login_passwd='" + strPass + "'";
qStrSel += ';';
var query = client.query( qStrSel );
console.log( "sql:" + qStrSel );
var query = client.query( qStrSel );
query.on( 'end', function( row, err ) {
req.session.user = strUser; // セッションに保存
res.render('loginchk', {
title : 'ログイン成功画面',
content: 'login',
user : strUser,
pass : strPass
});
});
query.on( 'error', function( error ){
res.render('loginchk', {
title : 'ログイン不成功画面',
content: 'login',
user : strUser,
pass : strPass
});
});
});
});
module.exports = router;