如何使用Koala gem获取Facebook用户的电子邮件

时间:2014-01-08 17:17:18

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

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

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

def facebook  @facebook || =考拉:: 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”)不会返回用户的电子邮件。有人知道怎么做吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

这应该有效:

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

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

答案 1 :(得分:-3)

试试这个:

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

如果public_attributes未返回电子邮件,则表示该用户尚未授权您的应用程序的电子邮件。检查你添加"电子邮件" OAuth授权流程的范围。如果你使用devise,这就是配置:

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