Sidekiq不断对CSRF保护大喊大叫,但路由安装在Rails.application.routes.draw中
我有一个 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
有任何想法吗?
回答
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
回答
您在 API 模式下使用 Rails,它不提供会话,因此您无法挂载依赖于会话的其他 Rack 应用程序。记录在这里:
https://edgeguides.rubyonrails.org/api_app.html#using-session-middlewares
THE END
二维码