快速重定向和本地人

时间:2014-05-23 18:09:10

标签: node.js express passport.js

我使用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'未定义"

1 个答案:

答案 0 :(得分:1)

您必须提供带有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);
  });
});