如何在 Rails OAuth 请求中设置参数?

How do I set a parameter in a Rails OAuth request?

我有一个使用 omniauth-github gem 的 Rails 应用程序。根据Github documentation,我可以在初始请求中将参数allow_signup设置为false,这样用户只有在已经有Github帐户的情况下才能登录我的应用程序。这是我想要的行为。

我一直没弄清楚的部分是:我到底应该在哪里设置这个参数?我已将它添加到登录 link 路径 ("auth/github?allow_signup=false"),但这不起作用。这应该在 config/initializers/omniauth.rb 中的 provider :github 行吗?具体怎么做?

您应该将参数显式传递给 provider 函数。所以请尝试以下代码段。

provider :github, ENV['GITHUB_KEY'], ENV['GITHUB_SECRET'], allow_signup: 'true', scope: 'user,repo,gist'

我是这样工作的:

# config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :github,
    ENV['GITHUB_KEY'],
    ENV['GITHUB_SECRET'],
    {
      client_options: {
        authorize_url: 'https://github.com/login/oauth/authorize?allow_signup=false'
      }
    }
end

显然它也适用于 Devise,将 provider 替换为 config.omniauth 并将其放在 config/initializers/devise.rb 中。