2011-02-19 80 views
7

不提供电子邮件我使用OmniAuth,并通过Facebook登录后,我让我的omniauth.auth键,它看起来像这样:OmniAuth - Facebook登录在USER_INFO

user_info: 
    name: Tim Sullivan 
    urls: 
    Facebook: http://www.facebook.com/... 
    Website: 
    nickname: ... 
    last_name: Sullivan 
    first_name: Tim 
uid: "123456789" 
credentials: 
    token: [some token] 
extra: 
    user_hash: 
    name: Tim Sullivan 
    timezone: -5 
    gender: male 
    id: "123456789" 
    last_name: Sullivan 
    updated_time: 2010-12-30T00:52:39+0000 
    verified: true 
    locale: en_US 
    link: http://www.facebook.com/... 
    email: [email protected] 
    first_name: Tim 
provider: facebook 

现在,according to the docs,在电子邮件应位于user_info部分,但不是。但是,在extra/user_hash部分。由于我正在剥离extra,它没有被存储,所以后来在管道上出现问题。我可以自己添加它,但这并不能解释为什么它不在首位。

为什么不将电子邮件放入user_info部分?一个错误?无证变更?

+1

我认为文档只是不是最新的,或者它只是一个错误。你必须在剥离额外之前得到它......我想我必须这样做,但我没有注意到当时的文档是错误的。我刚刚检查了回应是什么。 – Robin 2011-02-19 03:44:14

+0

这看起来很奇怪。代码尝试将其设置在`user_info`中:/ https://github.com/intridea/omniauth/blob/master/oa-oauth/lib/omniauth/strategies/facebook.rb#L32 – raidfive 2011-02-19 06:13:47

回答

1

我认为该文档不是最新的。我通常在删除它之前从额外的散列中获取它。

email = omniauth["extra"]["user_hash"]["email"] 
3

搬到

email = omniauth["extra"]["raw_info"]["email"] 
2

哈希“信息”包含了用户的所有信息:

email = omniauth["info"]["email"] 
0

虽然omniauth["info"]使用,并应包含的信息,我已经注意到, Facebook似乎给了我错误的电子邮件链接到一个Facebook的错误/(功能?)。所以我得到间歇性的错误,这个邮件不存在会破坏一切。

经过多次调试,我发现不破坏我的代码最安全的方法是调用FB API与考拉或只是很好的REST,并获得登录所需的信息,如果omniauth["info"]不包含您需要的信息。

0

由于您使用Rails和JavaScript不(另一个人回答但对于JS),您需要专门的电子邮件要求从信息字段散列返回,因为它是不是默认。你在你的config /初始化/ omniauth.rb文件像这样进行设置:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :facebook, Rails.application.secrets.omniauth_provider_key, Rails.application.secrets.omniauth_provider_secret, 
    :scope => 'email', :display => 'popup', :info_fields => 'name,email' 
end 

此信息是种隐藏在上omniauth Facebook的创业板公司GitHub的自述文件中的Configuring部分的最末端。