2016-01-22 8 views
0

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

Внезапно (примерно в то время, когда я создал новое тестовое приложение в FB), я больше не получал электронные письма от входа в FB. Учитывая, что я тестирую свою учетную запись, проблем не должно быть. Вот стратегия FB:

passport.use(new FacebookStrategy({ 
    clientID: ids.facebook.clientID, 
    clientSecret: ids.facebook.clientSecret, 
    callbackURL: ids.facebook.callbackURL, 
    enableProof: false, 
    profileFields: ['id', 'displayName', 'emails'] 
    }, 
    function(accessToken, refreshToken, profile, done) { 
    console.log(profile) 
    User.findOne({ username: profile.emails[0].value }, function (err, user) { 
     if(err) { 
     return done(err) 
     } 
     if (user) { 
     // if doesn't contain facebook id, add it 
     user.update({facebookId : profile.id}, function(err, user) { 
      if (err) { 
      return done(err) 
      } 
     }) 
     return done(null, user) 
     } 
     if (! user) { 
     User.create({username: profile.emails[0].value, facebookId: profile.id}, function(err, user) { 
      if(err) { 
      return done(err, null) 
      } 
      return done(null, user) 
     }) 
     } 
    }); 
    } 
)); 

Линия, которая отображает профиль теперь возвращает это:

GET /auth/facebook 302 0.981 ms - 0 
{ id: 'xxxxxxxxxxxxxxx', 
    username: undefined, 
    displayName: 'Dan Donaldson', 
    name: 
    { familyName: undefined, 
    givenName: undefined, 
    middleName: undefined }, 
    gender: undefined, 
    profileUrl: undefined, 
    provider: 'facebook', 
    _raw: '{"id":"xxxxxxxxxxxxxxx","name":"Dan Donaldson"}', 
    _json: { id: 'xxxxxxxxxxxxxxx', name: 'Dan Donaldson' } } 

Кто-нибудь видел эту проблему? FB больше не предоставляет электронные письма для входа в систему для основного приложения или тестового приложения. У меня такое чувство, что это проблема FB, а не проблема node/js/express/passport, так как никаких изменений кода в отношении к этому не было связано ....

+0

Я бы предположил, что это не ошибка Facebook. И код не запрашивает поле электронной почты. – WizKid

+0

прочитайте журнал изменений, если что-то изменится - мои предположения будут «декларативными полями», найдите это в журнале изменений. – luschn

+0

вопрос разрешен с добавлением спецификации поля на маршруте: –

ответ

1

По моему комментарию выше: я добавил спецификация поля в маршруте:

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

То есть в документации, но, казалось, некоторые сомнения по этому поводу быть необходимо, и (я думаю, что это соответствующая точка), код сделал работы без него , на локальном хосте. Поэтому я более или менее забыл об этом.

Я не тестировал, но может случиться так, что только маршрут имеет значение, но в любом случае у меня он есть в обоих местах, и теперь он отлично работает.