使用Omniauth注册Facebook时,为什么有时用户的电子邮件不包含在身份验证哈希中?



我通过OmniAuth facebookgem使用Rails 3+Devise 1.5+OmniAuth,允许用户通过facebook注册我的应用程序。

我的一切都很顺利,只是偶尔会有人使用Facebook注册我的应用程序,而身份验证哈希不包含用户的电子邮件(尽管它包含许多其他属性)。再说一次,大多数时候我确实收到了电子邮件,但为什么有些时候不包含?有没有一种方法可以让用户设置他的Facebook隐私设置,让我的应用程序可以获取各种信息,如姓名、性别和时区,但不能获取电子邮件?我试图在我的Facebook个人资料中设置我自己的电子邮件隐私,但我仍然可以使用Facebook登录我的应用程序。

下面是我收到的一个哈希的例子,它省略了电子邮件(实际信息被审查):

"name"=>"XXXXXXXXXX","first_name"=>"XXX","last_name"=>"XXXXXX","image"=>"http://graph.facebook.com/XXXXXXXXX/picture?type=square","urls"=>{"Facebook"=>"http://www.facebook.com/XXXXXXXX"}},"credentials"=>{"token"=>"XXXXXXXXXXXXXXXXXXXXXXXXXXXX","expires_at"=>1329364800,"experies"=>true},"extra"=>"raw_info"=>{"id"=>"XXXXXXXX","name"=>"XXXXXXXXXX","first_name"=>"XXXX","last_name"=>"XXXXXX","link"=>"http://www.facebook.com/XXXXXXXXX","username"=>"XXXXXXXXXX","gender"=>"female","时区"=>-5,"locale"=>"en_US","verified"=>true,"updated_time"=>"2012-02-15T00:01:23+0000"}}

提前非常感谢!

当用户看到Facebook的身份验证对话框时,他们可以选择在批准身份验证之前不允许与您共享他们的电子邮件地址。也许这导致它现在出现在auth散列中。

请尝试吊销您的测试帐户,然后通过您的应用程序重新授权。在Facebook的对话框中,它应该列出你请求的所有权限,包括电子邮件。最右边是一个灰色的"X",它将禁止某个权限。尝试禁止电子邮件,看看它是否再现了你正在经历的事情。

我相信这是一个独立于电子邮件隐私设置的隐私控制。

发生这种情况的原因至少有几个:

  1. 该人使用手机号码而不是电子邮件地址注册,因此他们没有在Facebook注册的电子邮件地址。(请参阅"Facebook登录基础知识"帮助页面,确认您可以执行以下操作:https://www.facebook.com/help/418876994823287)
  2. 他们有一个在脸书上注册的电子邮件地址,但没有得到证实。根据这个问题:是否可以检查电子邮件是否在Facebook上得到确认?脸书不会返回未经验证的电子邮件地址(尽管他们必须在登录前提供电话号码来确认账户)。不过我还没有证实这种行为

最新更新