Floo0 Floo0 - 6 months ago 31
Node.js Question

Passport-Facebook not providing email even if it is in scope

In my application i register the facebook-strategie as follows:
But the returned profile does not contain the email-field....

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));
}));


The get is as follows:

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


(So i am using scope as said here: Passport-facebook dont get email)

On the FB-Login Page iam even asked for the email and i do provide it:
enter image description here

Any help is very appriciated!

Answer

From Facebook graph APIv2.4, we need to explicitly specify fields to get.

Introducing Graph API v2.4

So, we can write like:

  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'],
    },