Passport-Facebook authentication is not providing email for all Facebook accounts

javascript, node.js, passport-facebook, passport.js

Solution

Make sure these two things are in your code:

  passport.use(new FacebookStrategy({
            clientID: 'CLIENT_ID',
            clientSecret: 'CLIENT_SECRET',
            callbackURL: "http://www.example.com/auth/facebook/callback"
            passReqToCallback : true,
            profileFields: ['id', 'emails', 'name'] //This
        },

and this:

app.get('/connect/facebook', passport.authorize('facebook', { scope : ['email'] }));

This gives you access to the following:

- profile.id

- profile.name.givenName

- profile.name.familyName

- profile.emails

The last one being an array, so use `profile.emails[0].value` to get the first email address of the user.

As `shamim reza` pointed out, you might want to check if `profile.emails !== undefined` because the property only exists if the user has at least one verified email address.

As `Weft` pointed out, you might have to use the property `email` instead of `emails`.

Problem

I am using Passport-Facebook authentication. ``` passport.use(new FacebookStrategy({ clientID: 'CLIENT_ID', clientSecret: 'CLIENT_SECRET', callbackURL: "http://www.example.com/auth/facebook/callback" }, function (accessToken, refreshToken, profile, done) { process.nextTick(function () { console.log(profile) }); } )); ``` For some of the Facebook accounts I don't get the email_id and I even tried by using a scope variable such as below, but still I am unable to get the email_id. profileUrl : " " and ProfileFields : ['','']

Original source

Related problems