我正在使用passportjs来登录用户,并且在angularjs密码验证完成后尝试重定向他们。
但是当我尝试在另一页上获取用户数据时,我不断收到“无法读取未定义的属性'名称'”
片段:
app.post('/login', function(req, res, next) {
passport.authenticate('local', function(err, usr, info) {
res.locals.user = req.usr;
res.json({msg:true});
return next();
})(req, res, next);
});
在其他地方,我尝试执行以下操作:
user.find({name: req.user.name },function(err,q){
引发错误“无法读取未定义的属性'名称'”的错误
最佳答案
您必须为护照提供serializeUser
和deserializeUser
功能,以便护照将用户存储在请求对象中。有关更多信息,请查看指南:
http://passportjs.org/guide/configure/
具体来说,请查看“会话”的底部。另外,请参考以下类似问题:
Do I implement serialize and deserialize NodesJS + Passport + RedisStore?
在您的情况下,您似乎正在使用name
而不是id
来标识用户,因此无论您在哪里配置护照,都可能需要执行以下操作:
passport.serializeUser(function(user, done) {
done(null, user.name);
});
passport.deserializeUser(function(name, done) {
user.find({name: req.user.name }, function(err, user){
done(err, user);
});
});