我正在使用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){


引发错误“无法读取未定义的属性'名称'”的错误

最佳答案

您必须为护照提供serializeUserdeserializeUser功能,以便护照将用户存储在请求对象中。有关更多信息,请查看指南:

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

09-11 17:39