2015-07-10 2 views
9

Я создал новое приложение Rails и установил Devise и omniauth-facebook gem.omniauth-facebook cannnot получить адрес электронной почты

И установка моего приложения Facebook в качестве среды тестирования.

Итак, я вошел в систему через facebook и зарегистрировал свое новое приложение Rails, но request.env не содержал адрес электронной почты.

это возвращается request.env [ 'omniauth.auth']

{ 
    "provider" => "facebook", 
    "uid" => "xxxxxxxxxxxx", 
    "info" => { 
     "name" => "xxxxxxx", 
     "image" => "http://graph.facebook.com/xxx/picture" 
    }, 
    "credentials" => { 
      "token" => "tokenstring", 
     "expires_at" => xxxxxxxxx, 
      "expires" => true 
    }, 
      "extra" => { 
     "raw_info" => { 
      "name" => "xxx xxxx", 
       "id" => "xxxxxxxxx" 
     } 
    } 
} 

это стеллажи request.env [ 'omniauth.auth'] [ 'Информация'] [ 'электронная почта']

Как я могу получить адрес электронной почты из facebook через oauth? Пожалуйста, помогите мне.

Rails версии 4.2.3 является рубин версия является 2.2.2p95

Это Gem версии

omniauth (1.2.2) 
omniauth-facebook (2.0.1) 
devise (3.5.1) 

конфигурации/Инициализаторы/devise.rb

config.omniauth :facebook, 'appId', 'appSeacret', scope: 'email,public_profile' 

приложение/контроллеры/omniauth_callbacks_controller.rb

def all_provider 
    user = User.from_omniauth(request.env['omniauth.auth']) 
    if user.persisted? 
     sign_in_and_redirect user 
    else 
     session['devise.user_attributes'] = user.attributes 
     redirect_to new_user_registration_url 
    end 
    end 

    alias_method :facebook, :all_provider 

приложения/модель/user.rb

def from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
    user.email = auth.info.email 
    end 
end 

Добавить в 2015/7/11

я повторен тот же код с моим старым приложением тест facebook, и может получить полный public_profile и адрес электронной почты.

Существуют ли какие-либо ограничения для нового приложения facebook? кто-то знает?

ответ

15

Я нашел способ получить адрес электронной почты самостоятельно.

https://developers.facebook.com/docs/apps/changelog#v2_4

Этот документ говорит, что

декларативного поля, чтобы попытаться улучшить производительность мобильных сетей, Узлы и Ребра в v2.4 требует, чтобы вы явно запросить поле (я) вам необходимо для ваших запросов GET. Например, GET /v2.4/me/feed больше не включает в себя комментарии и комментарии по умолчанию, но GET /v2.4/me/feed?fields=comments.likes вернет данные. Дополнительные сведения о документах о том, как запрашивать определенные поля, см. В дополнительных .

так, что нужно написать в конфиге/Инициализаторы/devise.rb

config.omniauth :facebook, 'app_id', 'app_secret', scope: 'email', info_fields: 'email' 
  • scope: 'email' по умолчанию

не только масштабы, но и info_fields.

+5

для меня не работает, я не знаю, почему в моей конфигурации конфигурации есть config.omniauth: facebook, p.key, p.secret, scope: 'email', info_fields: 'email, name', но когда пытаетесь получить адрес электронной почты пользователя omniauth [: info] [: email], это пусто –

+0

Такая же проблема существует для меня – Rubyist

+0

Это не работает. – Red

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