passport.session()が行っていること

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の内容が表示される。

コメント