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

研究
OLYMPUS PEN E-PL9 (c)Maya
この記事は約3分で読めます。

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

[node.js]express-sessionでセッションを使用してみた – Qiita

自分がチャットアプリケーションを作る際にログイン時にセッションを使いたかったので。 とりあえず、express-sessionの使い方から学んできたい。 とりあえずセッションの格納方式はメモリストアで行く。 npm install –save-dev express-session パッケージファイルに自動で上書きしてくれるように–save-devオプションを使う。 これでexpress-sessionが使えるようになった。 宣言文は以下の通り。 var cookieParser = require(‘cookie-parser’); var session = require(‘express-session’);` npmのread.meではヴァージョン1.5以降はクッキーパーサーは必要はないと書いてあったのでもしかしたら一行目はひつようないかも。 sessionの設定 app.use(session({ secret: ‘secret’, resave: false, saveUninitialized: false, cookie:{ httpOnly: true, secure: false, maxage: 1000 * 60 * 30 } }); secret属性は指定した文字列を使ってクッキーIDを暗号化しクッキーIDが書き換えらているかを判断する。 resaveはセッションにアクセスすると上書きされるオプションらしい。今回はfalse. saveUninitializedは未初期化状態のセッションも保存するようなオプション。今回はfalse.

参考資料は上記。
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

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

[Node.js][Express]セッションを使う

Expressでセッションを使うには express-session モジュールを使います。 $ npm install –save express-session 次のコードはセッションを使ってユーザーのアクセス数を表示します。ブラウザでアクセスするたびにカウントが増えていくことが確認できます。 const express = require(‘express’); const session = require(‘express-session’); const app = express(); const sess = { secret: ‘secretsecretsecret’, cookie: { maxAge: 60000 }, resave: false, saveUninitialized: true, } if (app.get(‘env’) === ‘production’) { app.set(‘trust proxy’, 1) sess.cookie.secure = true } app.use(session(sess))

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に追加。
明日からアカウント登録を積んでみます。

コメント

タイトルとURLをコピーしました