Ruby on rails Omniauth未捕获初始get“/auth/:provider”请求

Ruby on rails Omniauth未捕获初始get“/auth/:provider”请求,ruby-on-rails,omniauth,Ruby On Rails,Omniauth,一字不差地遵循安装文档 在档案中 gem 'omniauth' gem 'omniauthgithub' gem 'dotenv-rails' 在config/initializers/omniauth.rb中 Rails.application.config.middleware.use OmniAuth::Builder do provider :github, ENV['GITHUB_CLIENT_ID'], ENV['GITHUB_CLIENT_SECRET'] end 以及用户

一字不差地遵循安装文档

在档案中

gem 'omniauth'
gem 'omniauthgithub'
gem 'dotenv-rails'
在config/initializers/omniauth.rb中

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :github, ENV['GITHUB_CLIENT_ID'], ENV['GITHUB_CLIENT_SECRET']
end
以及用户的链接

<%= link_to "Log in with GitHub!", "/auth/github" %>
但它并没有走那么远。当我点击链接时,立即出现路由错误

没有与[GET]/auth/github匹配的路由


我所能找到的一切都表明初始的/auth/:provider请求被Omniauth黑盒魔法截获,我所要做的就是配置回调路由。我也尝试过Facebook的整个设置,只是想看看它是否是Github特有的东西,但没有运气。我删除了Gemfile.lock并重新运行了bundle安装,只是为了确保gems都处于正常工作状态,但这并没有改变任何事情。我发现的所有其他关于omniauth的文章都是关于回调路由的,而不是最初的get请求——这让我相信它要么非常明显,要么非常模糊。请帮忙

今天,我一直在为同样的问题苦苦挣扎,除了我正在集成google_oauth2而不是github,最终对我有效的包括以下内容

具体而言,关于确保使用POST请求的部分:

OmniAuth 2.0+要求使用HTTP POST作为请求方法来启动 身份验证,因此应该使用method::post:this配置链接 需要rails ujs或类似工具来创建POST请求

所以,一旦我将视图更改为使用按钮而不是链接,或者我可以使用链接与方法::post,我已经让它工作了


另外,您是否也在使用Desive?如果是这样,请确保特别遵循与设备相关的安装说明,删除config/initializers/omniauth.rb,并将安装凭据放入config/initializers/designe.rb中,如上述wiki帖子中所示。。。否则,它显然会以一种非常安静的方式发生冲突,这会产生非常有趣的调试sesh

,正如@obiruby所说,这是由于OmniAuth 2.0+中默认启用了新的CSRF保护

如果您使用GitHub作为唯一的身份验证方法,CSRF不会构成威胁,因此您可以通过在config/initializers/omniauth.rb中添加以下行来安全地重新启用GET方法:

OmniAuth.config.allowed_request_methods = [:get, :post]

是的,好像就是这样。我现在得到了一个OmniAuth::AuthenticityError,所以这将是需要调试的其他东西,但使用POST请求似乎让我更进一步。谢谢我不是这方面的专家,但这个错误可能意味着您需要在gem文件中包含omniauth-rails\u csrf\u保护gem。
OmniAuth.config.allowed_request_methods = [:get, :post]