OmniAuth - вход в Facebook не предоставляет адрес электронной почты в user_info

Я использую OmniAuth, и после входа через Facebook я получаю свой ключ omniauth.auth, который выглядит так:

user_info: 
  name: Tim Sullivan
  urls: 
    Facebook: http://www.facebook.com/...
    Website: 
  nickname: ...
  last_name: Sullivan
  first_name: Tim
uid: "123456789"
credentials: 
  token: [some token]
extra: 
  user_hash: 
    name: Tim Sullivan
    timezone: -5
    gender: male
    id: "123456789"
    last_name: Sullivan
    updated_time: 2010-12-30T00:52:39+0000
    verified: true
    locale: en_US
    link: http://www.facebook.com/...
    email: [email protected]
    first_name: Tim
provider: facebook

Теперь, согласно документам, письмо должно находиться в разделе user_info , но это не так. Однако он находится в разделе extra/user_hash. Поскольку я удаляю extra, он не сохраняется, поэтому позже у меня возникают проблемы. Я мог бы добавить его сам, но это не объясняет, почему его там нет.

Почему электронная почта не помещается в раздел user_info? Жук? Недокументированное изменение?


person Tim Sullivan    schedule 19.02.2011    source источник
comment
Я думаю, что документ просто не актуален или это просто ошибка. Вам нужно будет получить его, прежде чем снимать лишнее... Я думаю, что должен был сделать то же самое, но я не заметил, что документация была неправильной в то время. Я только что проверил ответ.   -  person Robin    schedule 19.02.2011
comment
Это кажется странным. Код пытается установить его в user_info :/ github.com/intridea/omniauth/blob/master/oa-oauth/lib/omniauth/   -  person raidfive    schedule 19.02.2011
comment
Как вы изначально рассматривали возвращенный хэш? Это работает только в продакшене, но используя binding.pry... как бы вы это сделали?   -  person ahnbizcad    schedule 03.10.2014


Ответы (6)


Я думаю, что документ не актуален. Я обычно получаю его из лишнего хэша перед удалением.

email = omniauth["extra"]["user_hash"]["email"]
person Moski Doski    schedule 02.03.2011

переехал в

email = omniauth["extra"]["raw_info"]["email"]
person marmarko    schedule 02.07.2012
comment
Я использовал omniauth['extra'].raw_info.email :) - person Abe Petrillo; 03.07.2012

Хэш «info» содержит всю информацию о Пользователе:

email = omniauth["info"]["email"]
person Tiago    schedule 27.07.2012

В то время как omniauth["info"] используется и должен содержать информацию, я заметил, что facebook, похоже, выдает мне ошибки с электронной почтой, которая связана с ошибкой / (функцией?). Поэтому я получаю прерывистые ошибки с этим хешем, когда электронная почта отсутствует, что все ломает.

После долгой отладки я обнаружил, что самый безопасный способ не сломать мой код — это вызвать FB API с помощью Koala или просто старого доброго REST и получить информацию, необходимую для входа в систему, если omniauth["info"] не содержит нужной вам информации.

person jd83    schedule 02.01.2014

Мы используем omniauth с FB JSDK, и я не смог вернуть электронное письмо, потому что упустил из виду тот факт, что FB.login() требует опций «области действия».

 FB.login(function(response) {
   // handle the response
 }, {scope: 'email,user_likes'});

После добавления оптов (хотя прицел был настроен на сервере) все исправилось.

https://developers.facebook.com/docs/reference/javascript/FB.login/v2.2#permissions

person Ali    schedule 12.12.2014

Поскольку вы используете Rails, а не JavaScript (другой человек ответил, но для JS), вам нужно специально попросить, чтобы электронная почта возвращалась из хэша информационного поля, поскольку по умолчанию это не так. Вы настраиваете это в своем файле config/initializers/omniauth.rb следующим образом:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, Rails.application.secrets.omniauth_provider_key, Rails.application.secrets.omniauth_provider_secret,
  :scope => 'email', :display => 'popup', :info_fields => 'name,email'
end

Эта информация скрыта в самом конце раздела Настройка на сайте omniauth-facebook. GitHub readme от gem.

person Sia    schedule 21.09.2015