2015-07-07 10 views
18

In meiner Anwendung ist registriere ich die Facebook-Strategie wie folgt: Aber das zurück Profil enthält nicht das E-Mail-Feld ....Passbook bietet keine E-Mail, auch wenn es in ihrem Umfang

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

das ist wie folgt:

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

(so i Umfang verwenden wie hier gesagt: Passport-facebook doesn't get email)

Auf der FB-Login-Seite iam auch für die E-Mail gefragt, und i p tun Rovide es: enter image description here

Jede Hilfe ist sehr geschätzt!

+0

Sie müssen auch für die E-Mail-Feld fragen – WizKid

+0

Wie kann ich das tun? Ich dachte, ich mache dies mit 'scope: ['email']' – Rentrop

+0

scope: ['email'] ist welche Berechtigungen Sie wollen. Wenn Sie/me anrufen, müssen Sie/me? Fields = email – WizKid

Antwort

58

Von Facebook Grafik APIv2.4, müssen wir explizit Felder zu erhalten.

Introducing Graph API v2.4

So können wir schreiben wie:

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

Ich bin überrascht, dass dies nicht in offiziellen Passport.js docs erwähnt wird. – kmansoor

+1

Ugh! Dies wird in den Dokumenten des Plugins nicht erwähnt. – Green

1

Sie haben den Callback-Teil des Codes, Recht haben ?:

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

Und, ja, ja, sollte dies mit den scope:['email'], gemäß den Anweisungen von Ihrem Link und diese here also erfolgen.

+0

Ja, ich habe auch die E-Mail auf dem Rückruf ... Das ist seltsam – Rentrop