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

Posted

技术标签:

【中文标题】如何在 Rails OAuth 请求中设置参数?【英文标题】:How do I set a parameter in a Rails OAuth request? 【发布时间】:2019-07-19 02:23:50 【问题描述】:

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

我无法弄清楚的部分是:我应该在哪里设置这个参数?我已将其添加到登录链接路径 ("auth/github?allow_signup=false"),但这不起作用。这应该在config/initializers/omniauth.rb 内的provider :github 行中吗?究竟如何?

【问题讨论】:

【参考方案1】:

您应该将参数显式传递给provider 函数。所以请尝试以下sn-p。

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

【讨论】:

谢谢,但这似乎不起作用。我得到了它的工作,我将如何作为一个单独的答案发布。【参考方案2】:

这就是我让它工作的方式:

# 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 中。

【讨论】:

以上是关于如何在 Rails OAuth 请求中设置参数?的主要内容,如果未能解决你的问题,请参考以下文章

流动客户端主题时如何在 C# HttpClient 中设置 OIDC/OAuth 不记名令牌

如何在流动客户端主题时在C#HttpClient中设置OIDC / OAuth承载令牌

根据 URL 参数在 Rails 中设置 <li> 活动类

如何在 OAuth2 WebFlux 中设置成功和失败处理程序

Rails:如何在 ActiveRecord 中设置默认值?

如何在 Rails 中设置 GraphQL Relay API