rack-attack gemでユーザごとにアクセス数を数える

http://shepherdmaster.hateblo.jp/entry/2016/08/21/000115 でも紹介しましたが、 https://github.com/kickstarter/rack-attack という便利なgemがあります。

n秒間にn回アクセスされたらアクセスを弾くThrottles機能を使う場合、 IP単位でアクセス数を数える場合もありますが、ユーザ単位で数えたい場合もあると思います。

そういう場合は以下のようにsessionに入っている(だろう)ユーザidを返せばよいです。

class Rack::Attack
  throttle('req/ip', :limit => 10, :period => 10.second) do |req|
    req.session[:user_id]
  end
end