ruby-on-rails - oauth2 omniauth.rb 中的可选范围

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

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

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

我尝试在 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

退房 Google's Incremental Authorization guide了解更多详情。

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

关于ruby-on-rails - oauth2 omniauth.rb 中的可选范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19350868/

相关文章:

ruby-on-rails - 使用 brew 在 osx mavericks 上安装 rvm 时出错

mysql - 尝试部署 Rails 应用程序时,使用 MySql 时出现重复列名错误

ruby-on-rails - React js.jsx 中的 React Rails : Rendering an html. erb 文件

ruby-on-rails - ActiveAdmin 基于 getter 创建自定义过滤器

ruby-on-rails - 运行 rake db :migrate 时,Rails 创建迁移以将列添加到表中会导致错误

ajax - 使用 AJAX(不是表单)更新 Rails 3 部分

ruby-on-rails - 使用 Cucumber 进行测试的 "strange"(可能是 "extreme"或 "crazy")方法

token - 获取 Google API token

ios - iOS SDK中的YouTube集成问题

node.js - GET https ://graph. microsoft.com/v1.0/me 返回 401(未经授权),前提是具有 User.Read 权限的有效访问 token