Rails 4 Facebook аутентификация - дополнительная информация

Я использую stackru уже больше года и всегда находил ответ с помощью поиска. Однако я не смог найти ответ на эту проблему, поэтому на этой неделе мой первый вопрос:

Я следовал за Райаном Бейтсом RailsCast #360, чтобы узнать, как аутентифицировать пользователя в Rails с помощью гема omniauth-facebook, и после долгого поиска удалось адаптировать его для Rails 4.

К сожалению, когда я пытаюсь раскрыть его программу, извлекая имя_имя и фамилию, которые (должны быть?) Отправлены вместе с другими деталями в хэше, я не могу заставить его работать. Мне удалось получить адрес электронной почты в другой программе и даже изображение, но first_name и last_name не отправляются. Я получаю следующее возвращение, когда я raise request.env["omniauth.auth"].to_yaml в сессиях # создать

--- !ruby/hash:OmniAuth::AuthHash 
provider: facebook 
uid: '105531523151136' 
info: !ruby/hash:OmniAuth::AuthHash::InfoHash 
name: Donna Alajhbhfedabi Bushakwitz 
image: http://graph.facebook.com/105531523151136/picture
...

Вот мой инициализатор omniauth.rb

OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, FACEBOOK_CONFIG['app_id'], FACEBOOK_CONFIG['secret']
end

И мой файл user.rb:

class User < ActiveRecord::Base
  def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_initialize.tap do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.name
      user.first_name = auth.info.first_name
      user.last_name = auth.info.last_name
      user.oauth_token = auth.credentials.token
      user.oauth_expires_at = Time.at(auth.credentials.expires_at)
      user.save!
    end
  end
end

Любая помощь будет отличной. Я пытался выяснить, что не так в течение последних 3 дней.

1 ответ

Решение

Просто добавьте эту строку в ваш инициализатор:

info_fields: 'first_name, last_name'
Другие вопросы по тегам