【问题标题】:How to get Facebook user's email using the Koala gem如何使用 Koala gem 获取 Facebook 用户的电子邮件
【发布时间】:2014-01-26 22:39:55
【问题描述】:

我正在尝试使用 FB Open Graph 让我的应用更新用户的属性。我安装了考拉并使用 facebook-omniauth 进行身份验证。只是我想查询我的数据库以查找与他的 fb id 匹配的用户,如果该用户不存在,那么我想使用来自 facebook API 的数据更新用户模型的属性。我也使用 mongoid 作为我数据库的活动记录的对立面。

在我的用户模型中,我有这个方法。

定义脸书 @facebook ||= Koala::Facebook::API.new(oauth_token) 结束

在我的控制器中,我的一种方法中有这些代码行。

@user = User.where(facebook_uid: params[:auth_id])

if @user.empty?
      User.create(
       first_name: User.facebook.get_object("name"),
       last_name: User.facebook.get_object("email"),
       facebook_uid: params[:auth_id],
       facebook_oauth_token: params[:auth_token])
    else
      User.update_attributes(
        facebook_oauth_token: params[:auth_token]
    end

当我在控制台中玩耍时,User.facebook.get_object("email") 不会向我返回用户的电子邮件。有人知道怎么做吗?

谢谢!

【问题讨论】:

  • 在我的控制台上玩了很多之后,我能够弄明白。用于检索用户电子邮件的代码行是: User.facebook.get_object("me", :fields=>"email")["email"] 我确信有更简单的方法可以做到这一点为我工作。
  • 确保您已获得具有user_email 权限的oauth 令牌。然后你就可以发出@facebook.get_object user_id,它将返回用户信息和用户的电子邮件

标签: ruby-on-rails ruby facebook facebook-graph-api


【解决方案1】:

试试这个:

  facebook = Koala::Facebook::API.new(oauth_token)
  public_attributes = facebook.get_object("me")

如果 public_attributes 没有返回邮件,这意味着用户没有为你的 App 授权邮件。检查您是否将“电子邮件”范围添加到 OAuth 授权过程。如果您使用设计,这是配置:

  config.omniauth :facebook,  "facebook_app_key",  "facebook_app_secret", {scope: "email"}

【讨论】:

  • 问题具体是如何使用考拉而不是omniauth。要获取电子邮件,您首先需要通过 OAuth 向用户请求许可。您将获得一个 OAuth 访问令牌,可用于访问 Graph API 并获取用户电子邮件。 Koala::Facebook::OAuth.new(app_id, app_secret, callback_url).url_for_oauth_code(:permissions => "email")
【解决方案2】:

这应该可行:

graph = Koala::Facebook::API.new(oauth_access_token)
profile = graph.get_object('me', fields:'email')

现在profile['email'] 将为您提供用户的电子邮件。

【讨论】:

  • 过去 get_object 总是包含电子邮件 - 现在有时 facebook 不会包含它,除非您在字段列表中包含电子邮件...
  • 如何同时获取姓名和邮箱?
猜你喜欢
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2011-12-10
相关资源
最近更新 更多