Ruby on rails PUT/POST请求油门机架攻击重定向不工作
所以我有一个表单,它可以让XHR连接到外部api以获取令牌,然后提交到url,该url在后端的“/update”处调用我们的db。我们正试图通过使用机架攻击节流阀来限制一个人可以使用表单发出的请求数量。因此,当一个限制达到时,例如在两次尝试后,第三次应该给出一个429错误,然后重定向到我们的页面Ruby on rails PUT/POST请求油门机架攻击重定向不工作,ruby-on-rails,ruby,rackattack,Ruby On Rails,Ruby,Rackattack,所以我有一个表单,它可以让XHR连接到外部api以获取令牌,然后提交到url,该url在后端的“/update”处调用我们的db。我们正试图通过使用机架攻击节流阀来限制一个人可以使用表单发出的请求数量。因此,当一个限制达到时,例如在两次尝试后,第三次应该给出一个429错误,然后重定向到我们的页面/429。到目前为止,我有: throttle '/update', { limit: 2, period: 60 } do |req| next nil unless req
/429
。到目前为止,我有:
throttle '/update', {
limit: 2,
period: 60
} do |req|
next nil unless req.path == '/update' && req.put?
req.ip
end
然后,对于油门响应,我们将执行以下操作:
Rack::Attack.throttled_response = lambda do |env|
headers = {
'Location' => '/429'
}
[302, headers]
end
代码确实可以工作并返回429,但是重定向没有发生,即使我们在标题中有Location
。此外,我们还有一个端点,在该端点执行GET
,相同的响应会将用户成功重定向到/429
那么,当使用Rack Attack ruby on rails库发出
put
或post
请求时,如何重定向用户?是否有其他方法重定向用户?任何帮助都将不胜感激。问题在于HTTP响应状态代码。如果希望浏览器重定向,则需要使用3XX状态之一
# frozen_string_literal: true
module Rack
class Attack
throttle('test', limit: 1, period: 60.seconds) do |req|
true
end
end
# response
Rack::Attack.throttled_response = lambda do |env|
headers = {
'Location' => '/test_redirect'
}
[301, headers, []]
end
end
当我试着用302的时候,它还是不起作用。我也尝试了301,但是没有。我用完整的模块代码(一些基本的东西)更新了答案中的代码。它在我的应用程序中工作。试试看