我使用passportjs来记录用户,我尝试在使用angularjs完成密码验证后重定向它们。 但我一直在"无法阅读财产' name'未定义"当我尝试在另一页上获取用户数据时 片段:
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){
触发错误"无法读取属性' name'未定义"
答案 0 :(得分:1)
您必须提供带有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);
});
});