护照资料未通过新属性

Posted

技术标签:

【中文标题】护照资料未通过新属性【英文标题】:Passport Profile not passing new properties 【发布时间】:2013-12-01 03:10:13 【问题描述】:

我使用 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】:

哎呀。

.findOrCreate() 被异步调用,所以ls 在它的上下文中不存在。为了解决这个问题,我所要做的就是:

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,lastSeen:new Date(), function(err, user, created)
        var ls;
        if(err)return err;
        else 

          if(!created)
            console.log("Found User");
            var u = user.lastSeen;
            user.lastSeen = new Date();
            user.save(function(err)
              err?console.log(err):null;
            );
            ls=u;

          
          else
            console.log("Created User");
            ls="New User";
          
        
        console.log("ls = "+ls);
        console.log(typeof profile);
        profile.lastSeen = ls;
        console.log(profile.lastSeen);

        return done(null, profile);

      );        
    );
  
));

嗯,这很尴尬。希望这可以为其他人省去麻烦。

【讨论】:

以上是关于护照资料未通过新属性的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法读取未定义 Passpor 错误的属性“名称”

未找到 Laravel 护照迁移

未显示新的 CoreData 版本属性

迁移Coredata时,目标属性映射未在xcmod​​elmappingmodel中显示新添加的属性

访问链接属性未定义的影片剪辑

在 Kibana Dev Tools 中创建一个字段属性标记为“未分析”的新索引