Passport配置文件未传递新属性

时间:2013-11-18 03:54:20

标签: javascript node.js mongodb mongoose passport.js

我正在使用Passport OAuth2.0与Google作为我的提供商,并且遇到了一个奇怪的语法问题。

我的身份验证如下:

passport.use(new GoogleStrategy({
    clientID: GOOGLE_CLIENT_ID,
    clientSecret: GOOGLE_CLIENT_SECRET,
    callbackURL: "http://localhost:3000/auth/google/callback"
  },
  function(accessToken, refreshToken, profile, done) {
    // asynchronous verification, for effect...
    process.nextTick(function () {
    User.findOrCreate({id:profile.id}, function(err, user, created){
        if(err){return err;}
        else if(!created){
          console.log("Found User");

          user.lastSeen = new Date();
          user.save();

          var u=profile;
          u.lastSeen = user.lastSeen;
          return done(null, u);
        }
        else{
          console.log("Created User");
          User.create({id:profile.id, lastSeen: new Date()});
          user.save();
          var u=profile;
          u.lastSeen = new Date();
          return done(null, u);

        }

      });
      return done(null, profile);
    });
  }
));

出于某种原因,当我将u传递给jade时,它似乎没有.lastSeen属性,我的数据库也没有。

正在调用正确的函数(即如果我清除了我的数据库,我在控制台中获得了“创建用户”,否则我得到“找到用户”),并且用户对象将通过._json传递属性到我的玉模板,并显示配置文件图片,但我似乎无法得到我的自定义的东西坚持,或至少打破一些东西,并抛出错误。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

糟糕。

.findOrCreate()被异步调用,因此{1}在其上下文中不存在。要解决这个问题,我所要做的就是:

ls
嗯,那太尴尬了。希望这可以帮助别人解决问题。