web-dev-qa-db-ja.com

Passport.jsで設定されたCookieにアクセスする方法

Passport.jsを使用してNode-Appへのログインを実現しています。しかし、私のアプリでは、ユーザーのIDにアクセスする必要があり、現在、これを実現する方法がわかりません。

ユーザーIDにアクセスするにはどうすればよいですか、それとも自分でCookieで送信する必要がありますか?

12
Lukas Olsen

戦略の構成の横にあるアプリに次のコードを導入する必要があります。

passport.serializeUser(function(user, done) {
   done(null, user.id);
});

passport.deserializeUser(function(obj, done) {
   done(null, obj);
});

このように、認証されたユーザーでdone関数を呼び出すと、passportがuserIdをCookieに保存します。 userIdにアクセスするときはいつでも、リクエストの本文で見つけることができます。 (エクスプレスreq["user"])。

セッションに他のデータを格納する場合は、serializeUser関数を開発することもできます。私はそれをこのようにします:

passport.serializeUser(function(user, done) {
   done(null, {
      id: user["id"],
      userName: user["userName"],
      email: user["email"]
   });
});

詳細については、こちらをご覧ください: http://passportjs.org/docs/configure

22
AnduA

サインインパスに追加

res.cookie('userid', user.id, { maxAge: 2592000000 });  // Expires in one month

サインアウトパスに追加

res.clearCookie('userid');
18
user1071182

angular-fullstackgeneratorを使用している場合、これは、ユーザーCookie(後でAngularJSで取得できます)で_idを取得するようにsetUserCookieを変更した方法です。

setUserCookie: function(req, res, next) {
    if (req.user) {
        req.user.userInfo['_id'] = req.user._id;
        console.log('Cookie', req.user.userInfo);
        // Splice in _id in cookie
        var userObjWithID = {
            "provider": req.user.userInfo.provider,
            "role": req.user.userInfo.role,
            "name": req.user.userInfo.name,
            "_id": req.user._id
        };
        res.cookie('user', JSON.stringify(userObjWithID));
    }
    next();
}
1
Tom Söderlund

または、次のようにすることもできます。

passport.serializeUser(User.serializeUser());

passport.deserializeUser(User.deserializeUser());
 app.use((req, res, next) => {
  res.locals.login = req.isAuthenticated();
  res.locals.thisUser = req.user;
  next();
});
0
Ally Haire