2015-07-07 24 views
18

Nella mia domanda mi registro facebook-Strategie come segue: Ma il profilo restituita non contiene l'e-mail-campo ....Passport Facebook non fornisce e-mail anche se è portata

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

il GVG è la seguente:

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

(Così sto usando portata come detto qui: Passport-facebook doesn't get email)

al FB-pagina di login iam anche chiesto l'e-mail e lo faccio p rovide: enter image description here

Qualsiasi aiuto è molto apprezzato!

+0

Hai bisogno di chiedere per il campo e-mail anche – WizKid

+0

Come faccio a fare questo? Ho pensato di farlo con scope: ['email'] ' – Rentrop

+0

scope: ['email'] è il permesso che vuoi. Quando chiami/me devi fare/me? Fields = email – WizKid

risposta

58

Dal grafico di Facebook APIv2.4, è necessario specificare esplicitamente i campi da ottenere.

Introducing Graph API v2.4

Quindi, possiamo scrivere come:

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

Sono sorpreso che questo non sia menzionato nei documenti ufficiali di passport.js. – kmansoor

+1

Ugh! Questo non è menzionato nei documenti del plugin. – Green

1

Si ha la parte di callback del codice, giusto ?:

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

E, sì, in effetti, questo dovrebbe essere fatto con la scope:['email'], secondo le istruzioni dal tuo link e questo here also.

+0

Sì, ho anche l'e-mail sul callback ... Questo è strano – Rentrop