如何使用Passport.js访问Cookie

我正在使用Passport.js来实现login到我的节点应用程序。 但在我的应用程序中,我需要访问用户的ID,目前,我不知道如何实现这个事情!

我怎样才能访问用户名,或者我应该自己发送一个cookie?

您应该在策略configuration旁边的应用中引入以下代码:

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

通过这种方式,当您使用通过身份validation的用户调用done函数时,护照负责将userId存储在cookie中。 每当你想访问userId,你都可以在请求主体中find它。 (在快速req["user"] )。

如果要在会话中存储其他数据,也可以开发serializeUser函数。 我这样做:

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

你可以在这里find更多: http : //passportjs.org/docs/configure

添加到loginpath

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

添加到注销path

 res.clearCookie('userid'); 

如果你正在使用angular-fullstack生成器,这就是我修改setUserCookie来获取用户cookie中的_id (我以后可以在AngularJS中获取)。

 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(); } 

或者,您可以执行以下操作:

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