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

10,430

Solution 1

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

Solution 2

You do have the callback part of the code, right?:

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

And, yes, indeed, this should be done with the scope:['email'], as per instructions from your link and this one here also.

Share:
10,430
Rentrop
Author by

Rentrop

We are hiring: https://www.karriere.vnrag.de/

Updated on June 13, 2022

Comments

  • Rentrop
    Rentrop almost 2 years

    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 doesn't 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!