Facebook登录回调哈希文档

时间:2011-03-02 20:44:24

标签: ruby-on-rails facebook devise omniauth

我正在使用Omniauth和Devise通过Facebook验证用户使用Rails 3.0.4编写的Web应用程序

我在Ryan Bates的Railscasts之后模仿它:

http://railscasts.com/episodes/235-omniauth-part-1
http://railscasts.com/episodes/236-omniauth-part-2

此时,我可以使用我的Facebook帐户登录我的网站,并从回调哈希中取出我的电子邮件,这对我来说是这样的:

request.env["omniauth.auth"]  

{"user_info"=>  
  {"name"=>"Eric Hu",  
   "urls"=>  
    {"Facebook"=>"http://www.facebook.com/...", "Website"=>nil},  
   "nickname"=>"...",  
   "last_name"=>"Hu",  
   "first_name"=>"Eric"},  
 "uid"=>"...",  
 "credentials"=>  
  {"token"=> "..."},  
 "extra"=>  
  {"user_hash"=>  
    {"name"=>"Eric Hu",  
     "timezone"=>-8,  
     "gender"=>"male",  
     "id"=>"...",  
     "last_name"=>"Hu",  
     "updated_time"=>"2011-02-21T17:46:19+0000",  
     "verified"=>true,  
     "locale"=>"en_US",  
     "link"=>"http://www.facebook.com/...",  
     "email"=>"...",  
     "first_name"=>"Eric"}},  
 "provider"=>"facebook"}  

(replaced some fields with "..." for my own privacy)

现在,我使用此字段来获取用户的电子邮件地址

 request.env["omniauth.auth"]["user_info"]["extra"]["email"]

我不知道回调哈希是否随用户的设置而变化 - 我实际上限制了我在Facebook上的电子邮件显示设置,但它仍然显示出来。为了确保我的代码处理这个哈希的任何可能的变化,我想找到一些关于这个Facebook登录回调哈希看起来如何以及它如何变化的参考。到目前为止,我还没有在SO或Facebook开发人员文档中找到任何内容。

问题:Facebook登录回调哈希有官方参考吗?我不想假设所有用户都有相同的哈希元素。我在这里为其他想要使用Facebook和Omniauth验证他们的rails应用程序的人提供了尽可能多的信息。

1 个答案:

答案 0 :(得分:3)

查看Facebook permissions reference,这是您可以向用户请求的权限列表。这允许您请求特定的东西,如果用户授予权限,那么您可以保证该字段存在。我还建议您通读他们的authentication docs,以便了解用户体验。

一旦你知道你想要什么权限,你可以更新你的设备配置(config / initializers / devise.rb),以便设计正在请求你需要的权限:

config.omniauth :facebook, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET, {:scope => 'offline_access,email,user_birthday'}