expressでアプリケーションを作る際にsessionを使う
自分がチャットアプリケーションを作る際にログイン時にセッションを使いたかったので。
とりあえず、express-sessionの使い方から学んできたい。
とりあえずセッションの格納方式はメモリストアで行く。
モジュールインストール
npm install --save-dev express-session
パッケージファイルに自動で上書きしてくれるように--save-devオプションを使う。
これでexpress-sessionが使えるようになった。
app.jsでrequire&use
宣言文は以下の通り。
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.
- httpOnlyはクライアント側でクッキー値を見れない、書きかえれないようにするオプション
- secureオプションはhttpsで使用する場合はtrueにする。今回はhttp通信なのでfalse
- maxageはセッションの消滅時間。単位はミリ秒。ミリ秒は千分の一秒なので1000 * 60 * 30で30分と指定。
sessionの使用
今回はログインしたらセッションにユーザーIDを格納する。ちなみにログインフォームでidとパスワードが入力されreq.body.idで使用している。
var Users = mongoose.model('User');
var id = req.body.id;
var pass = req.body.password;
Users.findOne({ "id": id},function(err, user){
if(err){
console.log(err);
}
else{
if(user.password === pass){
req.session.username = id;
res.render('index', {name: req.session.username});
}
else{
res.render('login');
}
}
});
});
認証に成功したらreq.session.usernameをindexファイルにレンダリング。
indexファイルに以下の文を記述する.
<p>welcome to <%=name %> !!!<p>
おそらくセッションが作られた。
次はこれをsocket.ioで使用できるようにしたい。
github
githubにコードを挙げておくので参照してみてください。
参考文献
github express-sessionリポジトリ
https://github.com/expressjs/session
Node.js + Express.js + express-sessionでセッションにデータ格納する方法
http://qiita.com/moomooya/items/00f89e425a3034b8ea14