繁体   English   中英

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

[英]Omniauth isn't catching the initial get “/auth/:provider” request

逐字遵循设置文档

在宝石文件中

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/:provider/callback' => 'sessions#create'

但它并没有那么远。 当我单击链接时,会立即出现路由错误

没有路线匹配 [GET] "/auth/github"

我能找到的一切都表明最初的“/auth/:provider”请求被 Omniauth 黑盒魔法拦截,我要做的就是配置回调路由。 我已经用 Facebook 尝试了整个设置,只是想看看它是否是 Github 特定的东西,但没有运气。 我已经擦除了 Gemfile.lock 并重新运行 bundle install 以确保所有 gem 都处于正常工作状态,但这并没有改变任何东西。 我发现的所有其他omniauth 问题都是关于回调路由的,而不是最初的get 请求——这让我相信它要么非常明显,要么非常晦涩。 请帮忙!

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

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

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

我今天一直在努力解决完全相同的问题(除了我正在集成 google_oauth2 而不是 github),最终对我有用的方法包括遵循Devise wiki 最近更新的说明

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

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

因此,一旦我将视图更改为使用button_to而不是link_to (或者我可以将link_tomethod: :post一起使用),我就让它工作了。

另外,你也在使用 Devise 吗? 如果是这样,请确保遵循与设计相关的设置说明(具体而言,删除 config/initializers/omniauth.rb 并将您的设置凭据放入 config/initializers/devise.rb 中,如上述 wiki 帖子中所示...否则它显然会以一种非常安静的方式发生冲突,这可能会产生一个“非常有趣”的调试 sesh)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM