Я работаю с Facebook Omniauth и Devise, но столкнулся с проблемой, когда возвращаемый хэш не содержит никакой информации, которую я запрашиваю в своих информационных полях. Я просто пытаюсь получить Facebook, чтобы вернуть имя и фамилию по электронной почте, если они доступны отдельно, поэтому я могу создавать новых пользователей с этой информацией. Я не думаю, что мне нужно настроить определенные разрешения с Facebook, чтобы вернуть эти поля (как и с некоторыми информационными полями, требующими проверки).Facebook Omniauth hash не возвращает info_fields
Я использую Rails 4.2.6. Это возвращаемый хэш:
#<OmniAuth::AuthHash credentials=#<OmniAuth::AuthHash
expires=true expires_at=1486542909
token="EAAXYor9I0XgBADbIaZC99Lu0xGAdVVSXSyZC1TsZCHcZCi0kiWPdZCHA0DsLait7zn1cSpEsbc1mViWvFxZAPraz2Hdyfyn2pfonpeDlhP6Nqv7RiGNpDQ1Bxxm81LHwoPHMIbag95pksGZChcQ7YMrk8eUuQNkgScZD">
extra=#<OmniAuth::AuthHash
raw_info=#<OmniAuth::AuthHash id="xxxxxxxxxx" name="xxxxxxxx">>
info=#<OmniAuth::AuthHash::InfoHash
image="http://graph.facebook.com/xxxxxxxxxx/picture?type=square"
name="xxxxxxxxxx">
provider="facebook"
uid="xxxxxxxxxx">
Большинство решений для подобных вопросов вовлекли что-то в devise.rb, который выглядит, как это для меня:
config.omniauth :facebook, "xxxIDxxx", "xxxSECRETxxx", scope: 'email,public_profile', info_fields: 'email, first_name, last_name'
Мой CallBacksController:
class CallbacksController < Devise::OmniauthCallbacksController
def all
@user = User.from_omniauth(request.env["omniauth.auth"])
@request = request.env["omniauth.auth"]
if @user.persisted?
flash.notice = "You have successfully signed in!"
sign_in_and_redirect @user
else
session["devise.user_attributes"] = @user.attributes
redirect_to new_user_registration_path
end
end
alias_method :facebook, :all
end
My User.rb:
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable, :omniauth_providers => [:facebook]
has_many :posts
def self.from_omniauth(auth)
puts auth
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.email = auth.info.email || ""
user.password = Devise.friendly_token[0,20]
end
end
И эти родственные камни я использую:
gem 'geocoder'
gem 'devise'
gem 'omniauth'
gem 'omniauth-facebook'
Это сводит меня с ума в течение последних нескольких дней, и я застрял. Любые предложения будут ценны. Если есть вещи, которые могут быть связаны с тем, что я случайно ушел, сообщите мне, и я был бы рад опубликовать их. Благодаря!
любое обновление по этому вопросу, у меня такая же проблема, только я просто использую omniauth-facebook gem и no Devise – Phil
К сожалению, нет. Это был только побочный проект, над которым я работал, и решил сосредоточиться на других частях проекта и никогда не возвращался к этому. Если вы нашли решение, пожалуйста, дайте мне знать! Благодаря! –
Это не реальное исправление этой проблемы, но в качестве обходного пути я начал использовать жемчужину Koala для этого приложения, и после входа в систему с помощью facebook-omniauth gem я могу использовать Koala для получения конкретных фрагментов информации, которые Я пытался получить хеш-аут. Эти два ресурса помогли мне разобраться в https://www.youtube.com/watch?v=E_XACDrZSiI&t=138s и http://stackoverflow.com/questions/34808971/gem-koala-facebook-api-get-object- запрос –