我使用https://github.com/kickstarter/rack-attack/#throttles来限制对某些网址的请求。
机架攻击文档显示了如何根据请求IP或请求参数进行限制,但我想要做的是每个用户的限制请求。因此,无论IP如何,用户都应该能够在特定时间范围内发出不超过n个请求。
我们使用设计进行身份验证,我想不出根据请求唯一识别用户的简单方法。
我应该在会话/ cookie中存储用户ID吗?也许是uniq哈希?您对最佳方式的看法是什么?
答案 0 :(得分:11)
想出来。设计已在会话中存储用户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