Omniauth 未捕获初始获取“/auth/:provider”请求

sil*_*ory 4 ruby-on-rails omniauth

逐字遵循安装文档

在 gem 文件中

gem 'omniauth'
gem 'omniauthgithub'
gem 'dotenv-rails'
Run Code Online (Sandbox Code Playgroud)

在 config/initializers/omniauth.rb 中

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :github, ENV['GITHUB_CLIENT_ID'], ENV['GITHUB_CLIENT_SECRET']
end
Run Code Online (Sandbox Code Playgroud)

以及用户的链接

<%= link_to "Log in with GitHub!", "/auth/github" %>
Run Code Online (Sandbox Code Playgroud)

回拨路线也已设置

get '/auth/:provider/callback' => 'sessions#create'
Run Code Online (Sandbox Code Playgroud)

但事情还没有那么远。当我点击链接时,立即出现路由错误

没有路由匹配 [GET]“/auth/github”

我能找到的所有内容都表明最初的“/auth/:provider”请求被 Omniauth 黑盒魔法拦截,我所要做的就是配置回调路由。我也尝试过 Facebook 的整个设置,只是想看看它是否是 Github 特有的东西,但没有成功。我已经擦除了 Gemfile.lock 并重新运行捆绑安装,只是为了确保 gems 全部正常工作,但这并没有改变任何东西。我发现的所有其他omniauth问题都是关于回调路由的,而不是初始获取请求——这让我相信它要么是非常明显的,要么是非常模糊的。请帮忙!

Sta*_*own 9

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

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

OmniAuth.config.allowed_request_methods = [:get, :post]
Run Code Online (Sandbox Code Playgroud)