2015-07-07 7 views
18

В моем приложении я зарегистрировать facebook-Stratégie следующим образом: Но возвращаемый профиль не содержит электронное-поле ....паспортного Facebook не предоставляет электронную почту, даже если она находится в области

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

прибудете выглядит следующим образом:

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

(так что я использую рамки, как сказано здесь: Passport-facebook doesn't get email)

на IAM FB-страницы Войти даже запрошен по электронной почте, и я р rovide it: enter image description here

Любая помощь очень приветствуется!

+0

Вы должны задать для поля электронной почты также – WizKid

+0

Как мне это сделать? Я думал, что делаю это с помощью 'scope: ['email']' – Rentrop

+0

scope: ['email'] - какие разрешения вы хотите. Когда вы звоните/мне, вам нужно сделать/мне? Fields = email – WizKid

ответ

58

Из графа Facebook APIv2.4 нам необходимо явно указать поля для получения.

Introducing Graph API v2.4

Таким образом, мы можем написать так:

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

Я удивлен, что это не упоминается в официальных паспортах. Js docs. – kmansoor

+1

Ugh! Это не упоминается в документах плагина. – Green

1

У вас есть обратный вызов части коды, правильно ?:

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

И, да, в самом деле, это должно быть сделано с scope:['email'], в соответствии с инструкциями из вашей ссылки, и это один here also.

+0

Да, у меня также есть письмо по обратному сообщению ... Это странно – Rentrop