passport.session()が実際に行っていること
app.use(passport.session());
app.useでミドルウェアとしてpassport.session()を呼び出しますが、
なにを実際におこなっているのでしょうか?
app.use(passport.session());
は、app.use(passport.authenticate('session'));
と同じです。つまり、sessionでアクセス認証を行っています。
また、req.userを管理していて、クライアントCookieからsession idを読みこんで、それをもとにユーザー情報へ「deserialize」します。
deserializeするためには、以下のようなコードを書く必要があって、mongooseを使って、MongoDBをuser.idで検索して、userオブジェクトが存在すればそれを返します。
passport.deserializeUser(function (user, done) {
User.findById(user.id, function (err, user) {
done(err, user);
});
});
app.use(passport.session())前後でreq.userが変化するかどうか試す
app.use(passport.initialize());
app.get("/test", (req, res) => {
res.send(req.user);
});
app.use(passport.session());
では、http://[ホスト]/testで何も表示されないが、
app.use(passport.initialize());
app.use(passport.session());
app.get("/test", (req, res) => {
res.send(req.user);
});
では、req.userの内容が表示される。
コメント