Rerequest不适用于passport-facebook-token

时间:2015-12-03 12:49:54

标签: node.js facebook email authorization passport.js

我需要来自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屏幕中编辑信息并取消选中电子邮件地址)请注意它是如何再次弹出电子邮件地址验证屏幕而无法将其关闭。

如何确保再次为电子邮件弹出身份验证屏幕?

0 个答案:

没有答案