【发布时间】:2017-04-26 04:18:28
【问题描述】:
我一直在使用 Facebook Omniauth 和 Devise,但遇到了一个问题,即返回的哈希不包含我在信息字段中请求的任何信息。我只是想让 Facebook 用电子邮件返回名字和姓氏(如果可以单独使用的话),这样我就可以使用该信息创建新用户。我认为我不需要为 Facebook 设置特定权限来返回这些字段(就像您对一些需要验证的 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'
我的回调控制器:
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
我的用户.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 而没有设计
-
很遗憾没有。这只是我正在做的一个副项目,并决定专注于项目的其他部分,并且再也没有回过头来解决这个问题。如果您确实找到了解决方案,请告诉我!谢谢!
-
这不是这个问题的实际解决方案,但作为一种解决方法,我开始为这个应用程序使用 Koala gem,在使用 facebook-omniauth gem 登录后,我可以使用 Koala获取我试图从身份验证哈希中获取的特定信息。这两个资源帮助我弄清楚youtube.com/watch?v=E_XACDrZSiI&t=138s 和stackoverflow.com/questions/34808971/…
标签: ruby-on-rails ruby devise omniauth omniauth-facebook