retries remove password job how create ruby ruby-on-rails-3 redis rescue sidekiq

ruby - remove - ¿Cómo puedo proteger con contraseña mi ruta/sidekiq(es decir, necesito autenticación para la herramienta Sidekiq:: Web)?



sidekiq password (7)

Estoy usando sidekiq en mi aplicación de rieles. Por defecto, cualquier persona puede acceder a Sidekiq agregando "/ sidekiq" después de la url. Quiero proteger / autenticar con contraseña solo la parte sidekiq. ¿Cómo puedo hacer eso?


Consulte "Seguridad" en https://github.com/mperham/sidekiq/wiki/Monitoring

Sidekiq :: Web usa Rack::Protection para proteger su aplicación contra ataques web típicos (como CSRF , XSS , etc.). Rack :: Protection invalidaría su sesión y generaría un error Forbidden si considera que su solicitud no cumple con los requisitos de seguridad. Una de las posibles situaciones es que su aplicación funcione detrás de un proxy inverso y no le pase encabezados importantes ( X-Forwarded-For , X-Forwarded-Proto ). Tal situación y solución se pueden encontrar en este artículo y número 2560 ...


Lamento llegar tarde a la fiesta, pero https://github.com/mperham/sidekiq/wiki/Monitoring recomienda lo siguiente para Devise:

Para permitir cualquier User autenticado:

# config/routes.rb authenticate :user do mount Sidekiq::Web => ''/sidekiq'' end

Para restringir el acceso a User.admin?

# config/routes.rb authenticate :user, lambda { |u| u.admin? } do mount Sidekiq::Web => ''/sidekiq'' end

https://github.com/mperham/sidekiq/wiki/Monitoring también tiene muchos otros esquemas de seguridad.

Esto fue probado usando Rails 5.1.3, Devise 4.3 y Sidekiq 5.0


Otra opción sería agregar algo como CanCan y acceso especial basado en roles.


Pon lo siguiente en tu inicializador sidekiq

require ''sidekiq'' require ''sidekiq/web'' Sidekiq::Web.use(Rack::Auth::Basic) do |user, password| [user, password] == ["sidekiqadmin", "yourpassword"] end


Si está activando su propia autenticación personalizada, puede usar el ejemplo siguiente al que se hace referencia en los documentos here .

# lib/admin_constraint.rb class AdminConstraint def matches?(request) return false unless request.session[:user_id] user = User.find request.session[:user_id] user && user.admin? end end # config/routes.rb require ''sidekiq/web'' require ''admin_constraint'' mount Sidekiq::Web => ''/sidekiq'', :constraints => AdminConstraint.new


Si está utilizando Sorcery para la autenticación, aquí se explica cómo usar las restricciones de las rutas de Rails para proteger ciertas rutas.

Copiado aquí de la wiki de hechicería para redundancia:

Este tutorial muestra cómo usar las restricciones de rutas de Rails con la joya de Hechicería. ¡Gracias a @anthonator por escribirlo!

Primero, defina el módulo UserConstraint que se usará para todas las restricciones:

module RouteConstraints::UserConstraint def current_user(request) User.find_by_id(request.session[:user_id]) end end

Luego, al haber definido ese módulo, puede especificar clases de restricciones específicas. En estos ejemplos, la primera ruta solo funcionará si no hay ningún usuario conectado, la segunda solo funcionará para el usuario registrado que sea administrador:

class RouteConstraints::NoUserRequiredConstraint include RouteConstraints::UserConstraint def matches?(request) !current_user(request).present? end end class RouteConstraints::AdminRequiredConstraint include RouteConstraints::UserConstraint def matches?(request) user = current_user(request) user.present? && user.is_admin? end end

Finalmente, puede agregar las restricciones a config/routes.rb :

MyApp::Application.routes.draw do # other routes … root :to => ''admin#dashboard'', :constraints => RouteConstraints::AdminRequiredConstraint.new root :to => ''home#welcome'', :constraints => RouteConstraints::NoUserRequiredConstraint.new end


Si está utilizando Devise (u otra autenticación basada en Warden), puede hacerlo, suponiendo que tiene un modelo AdminUser en su aplicación.

# config/routes.rb # This defines the authentication constraint constraint = lambda do |request| request.env[''warden''].authenticate!({ scope: :admin_user }) end # This mounts the route using the constraint. # You could use any other path to make it less obvious constraints constraint do mount Sidekiq::Web => ''/sidekiq'' end