gpt4 book ai didi

ruby-on-rails - Facebook 身份验证数据返回零,姓名和电子邮件除外

转载 作者:行者123 更新时间:2023-11-30 05:22:06 25 4
gpt4 key购买 nike

我使用 Devise gem 为我的应用程序设置了一个用户模型。我正在尝试使用 Omniauth 在 Facebook 身份验证中工作。我可以检索 NameEmail 数据,但我无法获取任何其他 public_profile 数据。在此示例中,我尝试获取 Gender,但其他数据均无效。当我访问此路径时:user_omniauth_authorize_path(:facebook),将调用“controllers/registrations_controller.rb”中的“facebook”操作。但是对于创建的用户,user.gender 以及除姓名和电子邮件之外的所有其他数据返回 nil。

config/initializers/devise.rb

config.omniauth :facebook, "<ID>", "<SECRET>", scope: 'email', display: 'popup', info_fields: 'email,name,gender'

应用程序/模型/devise.rb

  devise :omniauthable, :omniauth_providers => [:facebook]
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.gender = auth.extra.raw_info.gender.to_s
end
end

app/controllers/registrations_controller.rb

  def facebook
@user = User.from_omniauth(request.env["omniauth.auth"])

if @user.persisted?
sign_in_and_redirect @user, :event => :authentication
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end

gem 文件

gem 'devise'
gem 'omniauth-facebook'

奇怪的是我连数据的类类型都获取不到。如果我对它们调用 class.to_sNameEmail 返回“String”,但所有其他数据返回“NilClass”。

我做错了什么?

更新:

好吧,我真的不知道可能会发生什么变化,但是这个完全相同的代码现在突然可以工作了......所以我猜问题解决了吗?

最佳答案

试试这个方法

def self.from_omniauth(access_token)
data = access_token.info
email = data.info.email
first_name = data.first_name
last_name = data.last_name
end

关于ruby-on-rails - Facebook 身份验证数据返回零,姓名和电子邮件除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39403416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com