3

Я работаю над созданием Face Book OAuth для входа пользователя на мой сайт. Я получаю объект обратно из Facebook с информацией о FB, но в этом ответе профиля нет никаких сообщений электронной почты.Не получать электронную почту от Facebook OAuth API, паспорт со стеком MEAN

Когда я нажимаю кнопку «Войти в Facebook» на моей странице, она берет меня в Facebook и говорит, что для приложения потребуется мой профиль и адрес электронной почты, поскольку я добавил электронное письмо в объем моих вещей. Вот мой код:

конфигурации/routes.js:

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

app.get('/auth/facebook/callback', 
    passport.authenticate('facebook', 
{ successRedirect: '/confirm_community', 
    failureRedirect: '/signin' })); 

============== passport.js

passport.use(new FacebookStrategy({ 
    // pull in our app id and secret from our auth.js file 
    clientID  : configAuth.facebookAuth.clientID, 
    clientSecret : configAuth.facebookAuth.clientSecret, 
    callbackURL  : configAuth.facebookAuth.callbackURL 

}, 

function(accessToken, refreshToken, profile, done) { 
    process.nextTick(function() { 
      console.log(profile); 
      // console.log(profile.emails[0].value); 
      User.findOne({'facebook.id':profile.id}, function (error, result){ 
        if(error){ 
         return done(error); 
        } 
        if(user) { 
         return done(null, user); 
        } 
        else { 
         var newUser = new User(); 
         newUser.facebook.id = profile.id; 
         newUser.facebook.token = accessToken; 
         newUser.facebook.name = profile.displayName; 
         newUser.facebook.email = profile.emails[0].value; 

         newUser.save(function (error){ 
          if(error){ 
           console.log(error); 
           throw error; 
          } else { 
           return done(null, newUser); 
          } 
         }); 
        } 
      }); 
     }); 
})); 

Вот это объект FB я вернусь, когда я console.log (профиль) в функции process.nextTick с ответом ФБ:

{ id: 'my id is coming back here', 
    username: undefined, (because I don't have one) 
    displayName: 'my name is coming back here', 
    name: 
    { familyName: undefined, (I don't have any of these in my profile) 
    givenName: undefined, 
    middleName: undefined }, 
    gender: undefined, 
    profileUrl: undefined, 
    provider: 'facebook', 
    _raw: '{"name":"my name is coming here","id":"my id is coming here"}', 
    _json: { name: 'my name is coming here', id: 'my id is coming here' } } 

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

ответ

1

Поиск «декларативной полей» в журнале изменений: https://developers.facebook.com/docs/apps/changelog#v2_4

Теперь вы должны указать поля, которые вы хотите получить в API вызова: /me?fields=name,email

+0

Спасибо за ответ. У меня теперь есть это: app.get ('/ auth/facebook/me? Fields = name, email', passport.authenticate ('facebook', {scope: ['email']})); но я получаю сообщение об ошибке «Can not GET/auth/facebook» при нажатии кнопки «Войти с Facebook» ..... мне нужно что-нибудь подобное в моей кнопке FB -scope = «email, user_birthday, user_about_me» ..? Или мне нужно будет удалить приложение и создать новый с этим изменением? – bschmitty

+0

, который является странной конечной точкой api, которую вы пытаетесь использовать ... сначала убедитесь, что вы авторизуетесь, а затем используйте конечную точку/me отдельно. и убедитесь, что знаете, как работает вход в facebook: https://developers.facebook.com/docs/facebook-login/v2.4 – luschn

+0

Да, я понял, что использовал это неправильно. В Документах FB говорится о «Шагах по использованию входа в Facebook с помощью SDK для JavaScript», но это похоже на совершенно другой подход, чем тот, который я использую. Я предполагаю, что я делаю это нормально, так как я, по крайней мере, возвращаю объект FB. Возможно, это неверно. Когда вы сначала авторизуетесь, ссылаетесь ли вы на их авторизацию с помощью FB и моего приложения, и как только ответ вернется, используйте конечную точку/me в функции process.nextTick? Спасибо еще раз за помощь. – bschmitty

2

я найти другое решение этой проблемы с PASSPORT- Модуль узла FACEBOOK. Надеюсь, это поможет другим.

passport.use(new FacebookStrategy({ 
    clientID: FACEBOOK_APP_ID, 
    clientSecret: FACEBOOK_APP_SECRET, 
    callbackURL: "http://localhost:3000/auth/facebook/callback", 
    profileFields: ['email'] 

Ref: https://github.com/jaredhanson/passport-facebook/issues/129

+0

Спасибо, это решило мою проблему. –

Смежные вопросы