4

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

现在我想提供额外的 google api 功能,但我不想让它成为强制性的。但是我想不出一种使特定范围可选的方法。

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

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

4

1 回答 1

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 的增量授权指南了解更多详情。

但请注意,通过更改name提供程序的 OmniAuth URL 将更改为/auth/new_name然后request.env['omniauth.auth']['provider']返回new_name

于 2013-10-14T18:02:47.980 回答