18.
セッション
セッション
セッションとは
セッション管理は、ウェブアプリケーションのユーザー認証、状態管理など重要な機能です。セッションデータをサーバー側で管理し、セッションIDをクライアントに送信して、セッションを識別します。
express-session
express-session は、Expressでセッションを利用するためミドルウェアです。セッションの初期化、有効期間、セキュリティ設定などをカスタマイズできます。
インストール
express-sessionパッケージをインストールします。
ターミナル
npm i express-session
express-sessionの設定
メインプログラム「server.js」でexpress-sessionモジュールを読み込み、ミドルウェアに登録します。
server.js
...
//モジュールを読み込み
const session = require('express-session')
//ミドルウェア登録
app.use(session({
secret: 'secret_key',
resave: false,
saveUninitalized: false,
}))
app.use(routes);
- express-sessionの設定は、ルーティングの前で実行してください
ユーザセッション処理
ユーザページにアクセスするには、セッショチェックが必要です。express-sessionでは、リクエストオブジェクトのsessionプロパティで管理できます。
exports.action = (req, res) => {
//リクエストオブジェクトのセッション
req.session
}
ユーザセッション
ユーザログインが成功したら、ユーザ情報をセッションに登録します。
controllers/LoginController.ejs
exports.auth = (req, res) => {
const email = req.body.login_name;
const password = req.body.password;
const user = new User();
const authUser = user.auth(email, password);
if (authUser) {
// ユーザ情報をセッションに登録
req.session.authUser = authUser;
res.redirect('/user');
} else {
res.redirect('/login');
}
}
セッションチェック
セッションを取得しViewに受け渡します。また、ユーザデータがなければログインページにリダイレクトします。
controllers/UserController.ejs
exports.index = (req, res) => {
//セッションからユーザ取得
var authUser = req.session.authUser;
if (!authUser) {
//ユーザがいなければ、ログインページにリダイレクト
res.redirect('/login')
}
//ユーザデータの受け渡し
var data = {
user: authUser,
}
res.render('user/index', data)
}
ユーザホームの確認
ユーザホームのページ「user/index.ejs」を作成し、ユーザ情報を表示します。
views/user/index.ejs
<div class="mt-3">
<div>
<div class="text-end">
<span class="me-3">
Welcome, <%= user.name %>
</span>
<a class="btn btn-sm btn-outline-primary" href="/user/logout">ログアウト</a>
</div>
</div>
<h2>ユーザ情報</h2>
<dl>
<dt>名前</dt>
<dd>
<%= user.name %>
</dd>
<dt>出身地</dt>
<dd>
<%= user.birthplace %>
</dd>
<dt>趣味</dt>
<dd>
<% user.hobby.forEach((hobby)=> { %>
<%= hobby %>
<% }) %>
</dd>
</dl>
</div>
結果

ログアウト処理
UserControllerでログアウト処理 logout() を追加します。セッションデータを削除し、ログインページにリダイレクトします。
controllers/UserController.ejs
exports.logout = (req, res) => {
//ユーザセッション削除
delete(req.session.authUser)
//ログインページにリダイレクト
res.redirect('/login')
}