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'