Estoy usando rack-throttle
como motor de limitación de velocidad en la aplicación my rails 3. Creé mi propia clase basada en el Rack::Throttle::Interval
para definir la lógica de limitación de velocidad personalizada. Estoy comprobando si la solicitud se realiza para el controlador exacto y la acción exacta. Esto funciona bien si hago la solicitud GET
. Sin embargo, si envío POST
solicito, tengo algunos problemas.Disminución de las solicitudes POST en la aplicación de raíles
class CustomLimiter < Rack::Throttle::Interval
def allowed?(request)
path_info = Rails.application.routes.recognize_path request.url rescue path_info = {}
if path_info[:controller] == "some_controller" and path_info[:action] == "some_action"
super
else
true
end
end
end
Éstos son mis acciones del controlador
def question
#user is redirected here
end
def check_answer
#some logic to check answer
redirect_to question_path
end
Mis rutas
get "questions" => "application#question", :as => "question"
post "check_answer" => "application#check_answer", :as => "check_answer"
EDIT:
El problema es que POST
solicitudes están llegando a la aplicación para que el método allowed?
se llama . Pero cuando llamo al Rails.application.routes.recognize_path
obtengo una excepción de Route set not finalized
. ¿Cómo puedo evitar que un usuario envíe una gran cantidad de solicitudes de correos en la acción exacta del controlador exacto con la ayuda de rack-throttle
Se añade el middleware en application.rb
class Application < Rails::Application
#Set up rate limiting
config.require "ip_limiter"
config.require "ip_user_agent_limiter"
config.middleware.use IpLimiter, :min => 0.2
config.middleware.use IpUserAgentLimiter, :min => 2
end
Tanto IpLimiter
y IpUserAgentLimiter
se derivan de limitador personalizado
¿Cómo has insertar su estante del acelerador :: :: intervalo en su aplicación? – shingara
@shingara está incluido en 'application.rb' – RomanKapitonov
¿Está permitido? método es llamada en el método POST o no? ¿Puedes pasar la parte donde agregas este middleware en tu aplicación? – shingara