Да, можно передать параметры в rack_attack
Вы можете:
class Rack::Attack
Rack::Attack.cache.store = ActiveSupport::Cache::MemoryStore.new
limit_proc = proc { |req| (req.params["limit"] && req.params["limit"].to_i) || 1 } # default to 1
period_proc = proc { |req| (req.params["period"] && req.params["period"].to_i) || 5 } # default to 5
Rack::Attack.throttle('request per ip for campaigns', :limit => limit_proc, :period => period_proc) do |req|
req.ip if req.path == '/' && req.get?
end
end
Но вам следует избегать этого, потому что его довольно легко взломать, любой может отправить лимит и параметры периода и изменить регулирование.
Если вы хотите настроить лимит и период на основе пользователя, вы должны сохранить сопоставление пользователя с лимитом и периодом в redis.
Затем в limit_pro c & period_pro c загружает значения лимита и периода из redis.