Rails:在 Facebook Oauth 之后获取用户的电子邮件(使用 Devise & facebook omniauth gem)
Rails: Get user's email after Facebook Oauth (using Devise & facebook omniauth gem)
在用户从 Facebook 注册后,我无法访问他们的电子邮件、first_name 和 last_name。
这是我的 Omniauth.rb 的样子:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET'],
:scope => 'email',
:info_fields=>'first_name, last_name, email'
end
当 Facebook 登录 window 出现时,它会正确显示范围 ("this app will have access to your email")。但是当我查看响应时,我发现我没有收到我请求的任何字段。
{"provider"=>"facebook",
"uid"=>"10101161800900201",
"info"=>
{"name"=>"Jackson Cunningham",
"image"=>"http://graph.facebook.com/10101161800900201/picture"},
"credentials"=>
{"token"=>
"...",
"expires_at"=>1445243073,
"expires"=>true},
"extra"=>
{"raw_info"=>
{"name"=>"Jackson Cunningham", "id"=>"10101161800900201"}}}
想通了。除了 Omniauth.rb
之外,您只需要确保编辑 Devise.rb
Devise.rb 应该有:
config.omniauth :facebook, "your_facebook_id", "your_facebook_secret", scope: 'email,public_profile', info_fields: 'email, first_name, last_name'
替换您需要的任何特定 info_fields(所有可用列表 here)
在用户从 Facebook 注册后,我无法访问他们的电子邮件、first_name 和 last_name。
这是我的 Omniauth.rb 的样子:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_SECRET'],
:scope => 'email',
:info_fields=>'first_name, last_name, email'
end
当 Facebook 登录 window 出现时,它会正确显示范围 ("this app will have access to your email")。但是当我查看响应时,我发现我没有收到我请求的任何字段。
{"provider"=>"facebook",
"uid"=>"10101161800900201",
"info"=>
{"name"=>"Jackson Cunningham",
"image"=>"http://graph.facebook.com/10101161800900201/picture"},
"credentials"=>
{"token"=>
"...",
"expires_at"=>1445243073,
"expires"=>true},
"extra"=>
{"raw_info"=>
{"name"=>"Jackson Cunningham", "id"=>"10101161800900201"}}}
想通了。除了 Omniauth.rb
之外,您只需要确保编辑 Devise.rbDevise.rb 应该有:
config.omniauth :facebook, "your_facebook_id", "your_facebook_secret", scope: 'email,public_profile', info_fields: 'email, first_name, last_name'
替换您需要的任何特定 info_fields(所有可用列表 here)