Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Passport配置文件未传递新属性_Javascript_Node.js_Mongodb_Mongoose_Passport.js - Fatal编程技术网

Javascript Passport配置文件未传递新属性

Javascript Passport配置文件未传递新属性,javascript,node.js,mongodb,mongoose,passport.js,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(access

我使用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
属性,我的数据库也没有

调用了正确的函数(即,如果我清除了数据库,我会在控制台中得到“Created User”,否则我会得到“Found User”),用户对象通过
\u json
属性进入我的jade模板,并显示配置文件pic,但我似乎无法让我的自定义内容保持不变,或者至少破坏一些东西并抛出一个错误

有什么想法吗?

哎呀

正在异步调用
.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);

      });        
    });
  }
));
那太尴尬了。希望这能为其他人省去麻烦