【问题标题】:Passport-facebook doesn't get email [duplicate]Passport-facebook没有收到电子邮件[重复]
【发布时间】:2014-11-08 01:51:39
【问题描述】:

我已经使用 express 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);
            });
        });
    }));

如果有人可以帮助我解决我的问题,那就太好了:)

【问题讨论】:

  • 您是否尝试过记录配置文件对象以查看其中包含的内容?
  • 我现在试过了。个人资料不包含电子邮件...
  • 如果不使用 profileFields 参数会怎样?
  • 我有更多信息。但没有电子邮件
  • 也许this question 会有所帮助

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


【解决方案1】:

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

还在 facebookStrategy 中添加一个新字段 profileFields: [ 'email' , 'name' ]

【讨论】:

  • 请写出社区可以理解的更简洁的答案。
  • 感谢您的友好建议。由于我是stackoverflow的新手,我不熟悉回答的方式。下次我会努力的。
【解决方案2】:
  passport.use(new FacebookStrategy({
    clientID: config.facebook.clientID,
    clientSecret: config.facebook.clientSecret,
    callbackURL: config.facebook.callbackURL,
    passReqToCallback:true
  },

【讨论】:

  • 对答案的简短解释将对 OP 有用
【解决方案3】:

我遇到了同样的问题。我们有 10 位测试用户,所有 10 位用户都有与他们的 Facebook 帐户相关联的电子邮件地址。但对于 10 名测试人员中的一名,Facebook 没有在配置文件响应中返回“电子邮件”JSON 属性。我不知道为什么,因为它看起来与其他运行良好的 Facebook 个人资料相同。

解决方法是更改​​此行:

passport.authenticate('facebook')

到这里:

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

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

【讨论】:

猜你喜欢
  • 2018-06-01
  • 2018-06-01
  • 2017-05-03
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 2010-11-25
相关资源
最近更新 更多