Passport-facebook没有收到电子邮件

时间:2014-09-14 11:32:33

标签: node.js facebook-graph-api express passport-facebook

我已经在我的网站上使用快递js和passport-Facebook实现了Facebook-LogIn。它运作良好(我获得现场简介),但问题是我没有收到电子邮件。我收到一个错误:

email   : profile.emails[0].value,

TypeError:无法读取未定义的属性“0”

我的代码:

passport.use('facebook',new FacebookStrategy({
        clientID            : config.facebook.id,
        clientSecret    : config.facebook.secret,
        callbackURL  : '/auth/facebook/callback',
        profileFields : ['id', 'displayName', 'emails','photos']
    }, function(accessToken, refreshToken, profile, done) {

        User.findOne({provider_id: profile.id}, function(err, user) {
            if(err) throw(err);
            if(!err && user!= null) return done(null, user);

            var user = new User({
                provider_id : profile.id,
                name                 : profile.displayName,
                email               : profile.emails[0].value,
                photo               : profile.photos[0].value,
            });
            user.save(function(err) {
                if(err) throw err;
                return done(null, user);
            });
        });
    }));

如果有人可以帮我解决我的问题,那将会很棒。

3 个答案:

答案 0 :(得分:12)

我遇到了同样的问题。我们有10个测试用户,所有10个用户的Facebook帐户都有电子邮件地址。但对于10位测试者中的一位,Facebook没有回复“电子邮件”。配置文件响应中的JSON属性。我不明白为什么,因为它看起来与其他Facebook配置文件完全相同。

修复是改变这一行:

passport.authenticate('facebook')

对此:

passport.authenticate('facebook', { scope: [ 'email' ] })

我仍然无法解释为什么它适用于9/10,但不适用于一个。无论哪种方式,它现在都已修复: - )

答案 1 :(得分:1)

试试这个1 != L

还在facebookStrategy

中添加新字段passport.authenticate('facebook', { scope: [ 'email' ] })

答案 2 :(得分:0)

  passport.use(new FacebookStrategy({
    clientID: config.facebook.clientID,
    clientSecret: config.facebook.clientSecret,
    callbackURL: config.facebook.callbackURL,
    passReqToCallback:true
  },