Passport-Facebook即使在范围内也不提供电子邮件

Ren*_*rop 19 facebook oauth node.js facebook-oauth passport.js

在我的应用程序中,我按如下方式注册facebook-strategie:但返回的配置文件不包含电子邮件字段....

passport.use(new FacebookStrategy({
        clientID: config.facebook.clientID,
        clientSecret: config.facebook.clientSecret,
        callbackURL: config.facebook.callbackURL,
        passReqToCallback: true
    },
    function(req, accessToken, refreshToken, profile, done) {
        // No email in the following colsole.log
        console.log(JSON.stringify(profile));
    }));
Run Code Online (Sandbox Code Playgroud)

获得如下:

app.get('/oauth/facebook', passport.authenticate('facebook', {
    failureRedirect: '/login',
    scope:['email']
}));
Run Code Online (Sandbox Code Playgroud)

(所以我在这里说的使用范围:Passport-facebook没有收到电子邮件)

在FB-Login页面上iam甚至要求提供电子邮件,我确实提供了: 在此输入图像描述

任何帮助都很贴切!

Tsu*_*oka 67

从Facebook图APIv2.4开始,我们需要明确指定要获取的字段.

介绍Graph API v2.4

所以,我们可以这样写:

  passport.use(new FacebookStrategy({
      clientID: config.facebook.clientID,
      clientSecret: config.facebook.clientSecret,
      callbackURL: config.facebook.callbackURL,
      profileFields: ['id', 'email', 'gender', 'link', 'locale', 'name', 'timezone', 'updated_time', 'verified'],
    },
Run Code Online (Sandbox Code Playgroud)

  • 我很惊讶这在官方passport.js文档中没有提到. (7认同)