护照个人资料未通过新属性

Passport Profile not passing new properties

本文关键字:属性 新属性 个人资料      更新时间:2023-09-26

我正在使用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 属性进入我的 jade 模板,并显示个人资料图片,但我似乎无法让我的自定义内容粘住, 或者至少破坏某些东西并抛出错误。

有什么想法吗?

哎呀。

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

嗯,这很尴尬。希望这样可以省去别人的麻烦。