0

Привет народ Я искал в нескольких местах, и здесьfacebook не обратный адрес электронной почты

134 Email ключ не возвращается при попытке аутентификации пользователя https://github.com/jaredhanson/passport-facebook/issues/134

Я вклеить стандартный код Facebook. Я также указал поля профиля. Проблема заключается в том, что запрос к FB не извлекает адрес электронной почты пользователя, который необходим для моего приложения.

// Load the module dependencies 
var passport = require('passport'), 
    url = require('url'), 
    FacebookStrategy = require('passport-facebook').Strategy, 
    config = require('../config'), 
    users = require('../../app/controllers/users.server.controller'); 

// Create the Facebook strategy configuration method 
module.exports = function() { 
    // Use the Passport's Facebook strategy 
    passport.use(new FacebookStrategy({ 
      clientID: config.facebook.clientID, 
      clientSecret: config.facebook.clientSecret, 
      callbackURL: config.facebook.callbackURL, 
      profileFields: ["id", "birthday", "email", "first_name", "gender", "last_name"], 
      passReqToCallback: true 
     }, 
     function(req, accessToken, refreshToken, profile, done) { 
      // Set the user's provider data and include tokens 
      var providerData = profile._json; 
      providerData.accessToken = accessToken; 
      providerData.refreshToken = refreshToken; 

      console.log(profile); 
      var email = profile.emails ? profile.emails[0].value : '[email protected]'; 

      // Create the user OAuth profile 
      var providerUserProfile = { 
       firstName: profile.name.givenName, 
       lastName: profile.name.familyName, 
       fullName: this.firstName + ' ' + this.lastName, 
       email: email, 
       username: profile.username, 
       provider: 'facebook', 
       providerId: profile.id, 
       providerData: providerData 
      }; 

      // Save the user OAuth profile 
      users.saveOAuthUserProfile(req, providerUserProfile, done); 
     } 
    )); 
}; 

Здесь вы можете увидеть console.log (профиль) вывод:

{ id: '894894191844', 
username: undefined, 
displayName: undefined, 
name: { familyName: 'Something', givenName: 'Karl', middleName: undefined }, 
gender: 'male', 
profileUrl: undefined, 
provider: 'facebook', 
_raw: '{"id":"1197051993654521","first_name":"Karl","gender":"male","last_name":"Something"}', 
_json: 
{ id: '1197051993654521', 
first_name: 'Karl', 
gender: 'male', 
last_name: 'Koks', 
accessToken: 'XYZ', 
refreshToken: undefined } } 

Есть конкретные идеи, хотели бы решить эту проблему в ближайшее время :-)

+0

, возможно, не является единственным решением, но следующим работал для меня: 'passport.authenticate («Facebook», {сферы:«электронная почта»}));' того поля электронной почта будет заселена – karlkurzer

ответ

0

Моя конфигурация идентична, за исключением profileFields я использую email (множественное число) ra чем электронная почта.

// configure route 
app.get('/auth/facebook', passport.authenticate('facebook', { 
    scope: [ "email" ] 
})); 

// configure passport 
passport.use(facebook(callback)); 

// configure strategy 
export default (callback) => new FacebookStrategy({ 
    clientID: config.auth.facebook.clientID, 
    clientSecret: config.auth.facebook.clientSecret, 
    callbackURL: config.auth.facebook.callbackURL, 
    passReqToCallback: true, 
    enableProof: true, 
    profileFields: ['id', 'emails', 'name', 'gender', 'displayName'] 
}, callback); 
Смежные вопросы