使用Rails Omniauth gem和Google OpenID时,如何不要求用户发送电子邮件

weo*_*tch 5 openid ruby-on-rails google-account attribute-exchange omniauth

我当前的/config/initializers/omniauth.rb文件包含:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :open_id, nil, :name => 'google', :identifier => 'https://www.google.com/accounts/o8/id'
end
Run Code Online (Sandbox Code Playgroud)

当我通过访问/ auth/google登录Google时,Google会报告:

DOMAIN要求您提供来自Google帐户的一些信息EMAIL - 电子邮件地址:NAME(EMAIL)

我的应用程序不需要用户的电子邮件,因此我想删除此入门障碍.无论如何都有删除此要求.对于Facebook,我发现我可以添加选项的"范围"属性,例如:

provider :facebook, 'APP_ID', 'APP_SECRET', {:scope => ''}
Run Code Online (Sandbox Code Playgroud)

Win*_*eld 3

根据对 OpenID 策略(Google Aps 身份验证继承自)的源的快速审查,您可以传入选项,指定哪些属性是属性交换 (AX) 身份验证的可选属性和必需属性。

请参阅此处的源代码以获取选项: https: //github.com/intridea/omniauth/blob/master/oa-openid/lib/omniauth/strategies/open_id.rb

基于此,我认为您可以更改选项,如下所示以删除电子邮件作为必需属性:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :open_id, nil, :name => 'google', :identifier => 'https://www.google.com/accounts/o8/id', :required => [], :optional => []
end
Run Code Online (Sandbox Code Playgroud)

祝你好运。我没有测试这个,只是阅读源码。