【问题标题】:Sidekiq keeps yelling at CSRF protection, but the route is mounted inside Rails.application.routes.drawSidekiq 一直对 CSRF 保护大喊大叫,但路由安装在 Rails.application.routes.draw 中
【发布时间】:2021-03-22 20:41:42
【问题描述】:

我有一个 Rails 6.0.3.5 API,我没有使用 Devise 进行身份验证。 当我尝试访问 sidekiq UI 时,它会喊:

Sidekiq::Web needs a valid Rack session for CSRF protection. If this is a Rails app, make sure you mount Sidekiq::Web *inside* your application routes: Rails.application.routes.draw do mount Sidekiq::Web => "/sidekiq" .... end

但实际上我的路线是这样的:

Rails.application.routes.draw do
  mount Sidekiq::Web => '/sidekiq'

  namespace :api do
    namespace :v1 do
     ...
    end
  end
end

我已经使用config/initializers/sidekiq.rb 中的用户/密码保护了路由:

require 'sidekiq'
require 'sidekiq/web'
Sidekiq::Web.use(Rack::Auth::Basic) do |user, password|  
  Rack::Utils.secure_compare(::Digest::SHA256.hexdigest(user), ::Digest::SHA256.hexdigest(ENV["SIDEKIQ_USER"])) &
    Rack::Utils.secure_compare(::Digest::SHA256.hexdigest(password), ::Digest::SHA256.hexdigest(ENV["SIDEKIQ_PASSWORD"]))
end

有什么想法吗?

【问题讨论】:

    标签: sidekiq ruby-on-rails-6


    【解决方案1】:

    Github 用户“gagalago”在这里给出的解决方案。它对我有用!

    在你的 config/routes.rb 文件中有这个:

    require 'sidekiq/web'
    
    # Configure Sidekiq-specific session middleware
    Sidekiq::Web.use ActionDispatch::Cookies
    Sidekiq::Web.use ActionDispatch::Session::CookieStore, key: "_interslice_session"
    
    Myapp::Application.routes.draw do
      mount Sidekiq::Web => "/sidekiq"
      # ...
    end
    

    https://github.com/mperham/sidekiq/issues/4850#issuecomment-810880012

    【讨论】:

    • 完美运行,谢谢。这应该是在更新到最新的 sidekiq 版本时向 Rails api-only 应用程序添加 Sidekiq Web 支持的建议答案。
    【解决方案2】:

    您在 API 模式下使用 Rails,它不提供会话,因此您无法安装依赖于会话的其他 Rack 应用程序。记录在这里:

    https://edgeguides.rubyonrails.org/api_app.html#using-session-middlewares

    【讨论】:

    • 不知道为什么,但只需将 sidekiq 降级到 6.1.3 就可以了。有什么想法吗?
    • 您查看 v6.2.0 的更新日志了吗?
    • 降级不应该是一个解决方案。请检查我的答案,看看它是否适合你
    【解决方案3】:

    这似乎是与v 6.2.0 相关的问题,如Sidekiq's Github 中所述。

    我已经降级到 v 6.1.3 并且成功了。

    【讨论】:

    • 降级不应该是一个解决方案。请检查我的答案,看看它是否适合你
    猜你喜欢
    • 2021-07-30
    • 2018-12-21
    • 1970-01-01
    • 2019-04-10
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2015-01-17
    相关资源
    最近更新 更多