护照资料未通过新属性
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 错误的属性“名称”