Ruby on rails oauth2 omniauth.rb中的可选作用域

Ruby on rails oauth2 omniauth.rb中的可选作用域,ruby-on-rails,ruby-on-rails-3,oauth-2.0,ruby-on-rails-4,omniauth,Ruby On Rails,Ruby On Rails 3,Oauth 2.0,Ruby On Rails 4,Omniauth,为了验证用户,我在rails中使用omniauth-google-oauth2 gem 现在我想提供额外的GoogleAPI功能,但我不想让它成为强制性的。但我想不出一种方法来让特定的作用域成为可选的 我尝试在omniauth.rb中添加另一个条目,但它似乎不允许我为同一个提供者(google_oauth2)添加多个条目 有没有办法在rails应用程序中添加任何可选作用域?您可以使用name选项。这应该适用于任何OmniAuth提供程序: Rails.application.config.mid

为了验证用户,我在rails中使用omniauth-google-oauth2 gem

现在我想提供额外的GoogleAPI功能,但我不想让它成为强制性的。但我想不出一种方法来让特定的作用域成为可选的

我尝试在omniauth.rb中添加另一个条目,但它似乎不允许我为同一个提供者(google_oauth2)添加多个条目


有没有办法在rails应用程序中添加任何可选作用域?

您可以使用
name
选项。这应该适用于任何OmniAuth提供程序:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, 'GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET', {
    :name => 'google'
  }

  provider :google_oauth2, 'GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET', {
    :name => 'google_full',
    :scope => 'original_scope, extra_scope'
  }
end
不过,使用omniauth-google-oauth2,您可以采取另一种方法:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, 'GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET', {
    :name => 'google'
  }

  provider :google_oauth2, 'GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET', {
    :name => 'google_full',
    :scope => 'extra_scope',
    :prompt => 'consent',
    :include_granted_scopes => 'true'
  }
end
查看更多详细信息


但是请注意,通过更改提供者的
名称
,OmniAuth URL将更改为
/auth/new\u name
request.env['OmniAuth.auth']['provider']
将返回
新名称
,您找到更好的解决方案了吗?