【Node.js】セッションを使いたかった為express-sessionを試行した

投稿者:

例によって

例によってSNSライクなグループウェア的サイトを試作します。
ログイン済か否かをセッションで判別したかった為、express-sessionを試行します。
利用する環境はこちらの拙稿の環境です。

https://maya-pg.net/2020/10/29/%e3%80%90node-js%e3%80%91mysql%e3%81%a8%e3%81%ae%e9%80%a3%e6%90%ba%e3%82%92%e8%a9%a6%e3%81%99/

https://qiita.com/hika7719/items/3282ab2ebcdaf080912e

参考資料は上記。

インストールしてみます

dockerコンテナが動いている状態でシェルにて以下のコマンドを走らせます。

$ docker-compose run --rm app npm install --save-dev express-session

src/app.js に適宜設定情報を追加します。

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var session = require('express-session'); // ←追加
var logger = require('morgan');

// (略)

var app = express();

app.use(session({
  secret: 'secret',
  resave: false,
  saveUninitialized: true,
  cookie:{
    httpOnly: false,
    secure: false,
    maxage: 1000 * 60 * 30
  }
}));

//(略)

app.use('/', indexRouter);
app.use('/users', usersRouter);

app.use(session(… は app.use(‘/’, indexRouter); の前に書かなくてはなりません。
さっき引っ掛かりましたw

あとオンメモリですとサーバが再起動した場合に容易くセッションが飛んでしまうので、セッションストアを利用します。

https://tech.chakapoko.com/nodejs/express/session.html

var MySQLStore = require('express-mysql-session')(session);

var options = {
  host: 'mysql',
  port: 3306,
  user: 'root',
  password: 'password',
  database: 'todo'
};

var sessionStore = new MySQLStore(options);

app.use(session({
  secret: 'secret',
  resave: false,
  saveUninitialized: true,
  cookie:{
    httpOnly: false,
    secure: false,
    maxage: 1000 * 60 * 30
  },
  store: new MySQLStore(options),
}));

こちらに従いapp.jsに追加。
明日からアカウント登録を積んでみます。

コメントを残す