Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails PUT/POST请求油门机架攻击重定向不工作_Ruby On Rails_Ruby_Rackattack - Fatal编程技术网

Ruby on rails PUT/POST请求油门机架攻击重定向不工作

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

所以我有一个表单,它可以让XHR连接到外部api以获取令牌,然后提交到url,该url在后端的“/update”处调用我们的db。我们正试图通过使用机架攻击节流阀来限制一个人可以使用表单发出的请求数量。因此,当一个限制达到时,例如在两次尝试后,第三次应该给出一个429错误,然后重定向到我们的页面
/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,但是没有。我用完整的模块代码(一些基本的东西)更新了答案中的代码。它在我的应用程序中工作。试试看