Facebook登录回调哈希文档

3
我正在使用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应用程序的人使用。

我已经查看了这些页面(由于我仍然是SO新手,所以无法将它们放在我的原始帖子中):http://developers.facebook.com/docs/reference/api/user/http://developers.facebook.com/docs/guides/web/#login - Eric Hu
这可能会有所帮助 https://github.com/intridea/omniauth/wiki/Auth-Hash-Schema - aperture
1个回答

3
请查看Facebook权限参考,这是您可以向用户请求的权限列表。 这允许您请求特定的内容,如果用户授予权限,则可以保证该字段存在。 我还建议您阅读他们的认证文档,以便了解用户的体验。
一旦您知道需要哪些权限,您可以更新设备配置(config / initializers / devise.rb),以便devise请求您需要的权限:
config.omniauth :facebook, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET, {:scope => 'offline_access,email,user_birthday'}

嗯,是的,我认为请求权限是正确的方式。实际上让我感到惊讶的是我的电子邮件信息在回调哈希中 - 我在Facebook中限制了我的电子邮件显示设置,但仍然提供了这个信息在回调哈希中。 - Eric Hu
默认情况下,Devise会通过电子邮件权限。因此,当您告诉Facebook允许您的应用程序时,您明确地告诉Facebook可以向该特定应用程序提供您的电子邮件地址。 - Braden Becker
原来如此——我注意到“账户->设置->隐私设置->应用和网站”中,“发送电子邮件”是我的应用程序和许多其他应用程序的必填字段。我不知道Devise默认情况下会请求这些信息,谢谢! - Eric Hu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接