【问题标题】:Rails: facebook oauth: get user profile linkRails:facebook oauth:获取用户个人资料链接
【发布时间】:2016-06-21 20:15:03
【问题描述】:

我有一个 Rails 应用程序,用户可以使用 oauth 通过 facebook 登录。

我检索了他们的图片、电子邮件和姓名。我想做的是取消他们的个人资料链接(http://facebook.com/name)和性别(男、女、其他)

但它不适用于链接和性别,这是我的整合:

宝石文件

gem 'omniauth-facebook'

User.rb 模型

    def self.from_omniauth(auth)
      where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
        user.email = auth.info.email
        user.password = Devise.friendly_token[0,20]
        user.name = auth.info.name   # assuming the user model has a name
        user.image = auth.info.image # assuming the user model has an image
        user.gender = auth.info.gender # assuming the user model has a gender
      user.link = auth.info.link # assuming the user modal has a link
      end
    end

    def self.new_with_session(params, session)
    super.tap do |user|
      if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"]
        user.email = data["email"] if user.email.blank?
      end
    end
  end

编辑

devise.rb

config.omniauth :facebook, "***", "***"

但对于所有用户,性别和链接返回“nil”

有什么我可能遗漏的想法吗?

谢谢

【问题讨论】:

  • 尝试检查omniauth在认证后返回的auth哈希值。查看哈希是否返回了值。如果不是,那将是因为该特定用户的隐私设置。
  • 它返回 nil,但我尝试使用完全打开的配置文件,并且哈希也是 nil。但我认为链接值是公共配置文件的一部分,这意味着它不能被用户隐藏......无论他的个人资料多么私密。
  • 您是否检查了返回的身份验证哈希?它的结构,以及如何存在其他字段等。
  • omniauth-facebook 文档描述了一个示例哈希,显示性别、链接信息不在 info 键中,它嵌套在 extra``raw-info 键中:github.com/mkdynamic/omniauth-facebook#auth-hash

标签: ruby-on-rails ruby facebook oauth


【解决方案1】:

url参数现在不起作用,该字段的正确名称是link

config.omniauth :facebook, 'APP_ID', 'APP_SECRET', {scope: 'email', info_fields: 'email,name,verified,gender,link'}

我们可以从 Facebook 获得一系列属性:

https://developers.facebook.com/docs/facebook-login/permissions/v2.5#reference-public_profile

https://developers.facebook.com/docs/graph-api/reference/user

【讨论】:

    【解决方案2】:

    在config/initializers/devise.rb中指定provider时需要指定要获取的范围和字段

    即:

      config.omniauth :facebook, 'APP_ID', 'APP_SECRET', {scope: 'email', info_fields: 'email,name,verified,gender,url'}
    

    facebook 是否会给你所有你要求的数据是一个不同的问题。

    【讨论】:

    • 我很困惑,我用 devise.rb 文件编辑了我的答案,我没有在里面提供任何分数和字段。我仍然收到电子邮件和姓名...
    • 这是“范围”而不是“分数”。 Facebook 可能会默认为您提供一些字段,即使您没有指定它们(尽管如果明天发生变化,最好指定它们)。除非您指定它们,否则您将无法获得某些字段。
    • 好的,我会调查的。谢谢大卫!
    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2016-08-07
    • 2016-12-21
    • 2012-09-06
    • 2018-09-27
    相关资源
    最近更新 更多