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 : ['','']