【问题标题】:Express redirect and locals快速重定向和本地人
【发布时间】:2014-07-13 04:51:45
【问题描述】:

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

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

【问题讨论】:

  • 应该是req.user 还是req.usr
  • 它是 req.usr。我试着给它们命名以防我遇到这样的错误
  • 所以将req.user.name 更改为req.usr.name 不起作用?
  • 遗憾地改变仍然不起作用

标签: node.js express passport.js


【解决方案1】:

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

http://passportjs.org/guide/configure/

具体来说,请查看 Sessions 的底部部分。另外,请咨询这个类似的问题:

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

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多