2011-03-02 85 views
3

我使用Omniauth与设计为一个web应用程序,我用Rails写认证通过Facebook用户3.0.4Facebook登录回调哈希文档

我模仿它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验证其导轨应用程序的人。

+0

我已经通过这些页面看起来(我不能把它们放在我原来的帖子里,因为我还是个SO新手): http://developers.facebook.com/docs/reference/api/user/ http://developers.facebook .com/docs/guides/web /#login – 2011-03-02 20:44:50

+0

这可能有助于https://github.com/intridea/omniauth/wiki/Auth-Hash-Schema – aperture 2011-03-02 22:59:28

回答

3

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

一旦你知道你想你可以更新你的色器件配置(配置/初始化/ devise.rb)什么权限,以便能想出请求的权限,你需要:

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

嗯,是的,我认为你说对了,要求获得许可是正确的。实际上,我惊讶于我的电子邮件信息在回调哈希中 - 我的电子邮件显示设置在Facebook中非常受限制,并且仍然在回调哈希中提供。 – 2011-03-03 00:42:30

+0

Devise默认传递电子邮件许可,所以当你告诉Facebook允许你的应用程序,你明确告诉Facebook它可以给这个特定的应用程序你的电子邮件地址。 – 2011-03-03 00:49:55

+0

AH所以这就是为什么 - 我注意到帐户 - >设置 - >隐私设置 - >应用程序和网站,“给我发电子邮件”是我的应用程序和许多其他应用程序的必填字段。我不知道Devise在默认情况下请求这个信息,谢谢! – 2011-03-03 00:55:53