我正在使用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
传递属性到我的玉模板,并显示配置文件图片,但我似乎无法得到我的自定义的东西坚持,或至少打破一些东西,并抛出错误。
有什么想法吗?
答案 0 :(得分:0)
糟糕。
.findOrCreate()
被异步调用,因此{1}在其上下文中不存在。要解决这个问题,我所要做的就是:
ls
嗯,那太尴尬了。希望这可以帮助别人解决问题。