我需要来自Facebook的电子邮件才能使我的应用正常运行。但是,用户可以选择从身份验证屏幕关闭电子邮件。当发生这种情况时,我会得到一个像这样的空电子邮件字段
"emails":[{"value":""}]
这是我的原始请求
passport.authenticate('facebook-token', { scope :['email'] }, function(err, profile) {
fbhandler(req, res, err, profile);
})(req, res);
这是我处理返回值的地方
passport.use(new FacebookTokenStrategy({
clientID: config.facebookAuth.clientID,
clientSecret: config.facebookAuth.clientSecret,
profileFields: ['id', 'displayName', 'emails', 'name']
},
function(token, refreshToken, profile, done) {
console.log ("##### %j", profile);
var id = profile.id,
email = profile.emails[0].value,
methodId = 2;
if (email == "") {
return done(res.json({
errors: "Facebook",
}));
}
.. Do normal stuff.
}
和fbhandler
var fbhandler = function(req, res, err, profile) {
console.log("###### %j" ,profile);
if (!profile) {
console.log("reauth####");
passport.authenticate('facebook-token', { authType: 'rerequest', scope :['email'] }, function(err, profile) {
//Do normal stuff
})(req, res);
} else {
//do normal stuff
}
}
重新请求永远不会再次显示auth屏幕(实际上它只是闪烁一秒)并且它再次返回空电子邮件。
这似乎是一个护照问题,而不是FB重新申请问题,因为我能够成功地使用FB JS SDK。您可以在www.kavyavidya.us上查看此信息(单击底部的fb登录,在auth屏幕中编辑信息并取消选中电子邮件地址)请注意它是如何再次弹出电子邮件地址验证屏幕而无法将其关闭。
如何确保再次为电子邮件弹出身份验证屏幕?