我正在尝试使用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”)不会返回用户的电子邮件。有人知道怎么做吗?
谢谢!
答案 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"}