express-sessionを使って簡単なセッション管理をしてみる。
expressjs/session
バージョンは以下。
- express: 4.14.0
- node: v6.9.4
- npm: 3.10.10
セットアップ。
$ express -e login-sample
$ cd login-sample
$ npm install
$ DEBUG=login-sample:* npm start
一応確認。
続いて、インストールする。
$ npm install express-session --save
app.jsに下記を記載する。
// 読み込み
const session = require('express-session');
// ルーティング
app.use('/login', login);
app.use('/', index);
/routes/index.jsに下記を記載する。
var express = require('express');
var router = express.Router();
router.get('/', sessionCheck);
// loginしてる場合はindex pageへ、してない場合はlogin pageへ
function sessionCheck(req, res, next) {
if (req.session.user) {
res.render('index', { title: req.session.user.name});
} else {
res.redirect('/login');
}
};
module.exports = router;
/routes/login.jsに下記を記載。
const express = require('express');
const router = express.Router();
router.get('/', function(req, res, next) {
res.render('login');
});
router.post('/', function(req, res, next) {
if (req.body.userName) {
req.session.user = { name: req.body.userName };
res.redirect('../');
} else {
const err = 'data is wrong';
res.render('login', { error: err });
}
});
module.exports = router;
/views/login.ejsに下記を記載。
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ログイン前</title>
</head>
<body>
<h2>ログイン</h2>
<form action="/login" method="POST">
<input type="text" name="userName" placeholder="username"/>
<button type="submit">ログイン</button>
</form>
</body>
</html>
以上、これで起動させる。
ユーザー名を入れてログインすると、index pageにユーザー名表示されて完了。
参考
こちらを参考にさせてもらった。
Node.js + Express.js + express-sessionでセッションにデータ格納する方法
ただ、この記事内で使われてる、app.use('/', sessionCheck, index);
みたいな書き方ができなくなっていたみたいなので、sessionCheckを/routes/index.jsに持っていって、
router.get('/', sessionCheck);
function sessionCheck(req, res, next) {
if (req.session.user) {
res.render('index', { title: req.session.user.name});
} else {
res.redirect('/login');
}
};
な感じで利用した。
今回作成したコードを一応ここに置いておきます。
mazeltov7/loginProt