11

我正在使用https://github.com/kickstarter/rack-attack/#throttles来限制对某些 url 的请求。

Rack-attack 文档展示了如何通过请求 IP 或请求参数来限制,但我想做的是限制每个用户的请求。因此,无论 IP 是什么,用户都应该能够在特定时间范围内发出不超过 n 个请求。

我们使用设计进行身份验证,我想不出一种简单的方法来根据请求唯一识别用户。

我应该将用户 ID 存储在会话/cookie 中吗?也许是一个独特的哈希?你对最好的方法有什么看法?

4

1 回答 1

18

弄清楚了。设计已经在会话中存储了用户 ID。代码看起来像:

Rack::Attack.throttle('something', limit: 6, period: 60.seconds) do |req|
  req.env['rack.session']["warden.user.user.key"][0][0] if some_condition?
end
于 2015-07-30T09:04:30.180 回答