oauth2 omniauth.rb中的可选范围

时间:2013-10-13 22:09:58

标签: ruby-on-rails ruby-on-rails-3 oauth-2.0 ruby-on-rails-4 omniauth

要对用户进行身份验证,我在rails中使用omniauth-google-oauth2 gem。

现在我想提供额外的谷歌api功能,但我不想强制要求。但我无法找到一种方法来使特定范围成为可选范围。

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

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

1 个答案:

答案 0 :(得分:4)

您可以使用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

查看Google's Incremental Authorization guide了解更多详情。

请注意,通过更改提供商的name,OmniAuth网址将更改为/auth/new_namerequest.env['omniauth.auth']['provider']将返回new_name