14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.js(Express) + express-sessionを利用する

Last updated at Posted at 2017-04-13

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

14
14
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?