如何使用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(); });