2015-07-30 16 views
7

Sto utilizzando https://github.com/kickstarter/rack-attack/#throttles per limitare la richiesta a determinati URL.N ° di richieste per utente (con attacco rack e dispositivo)

I documenti di attacco rack mostrano come limitare l'IP della richiesta o i parametri di richiesta, ma quello che vorrei fare è limitare le richieste per utente. Quindi, non importa l'IP, l'utente dovrebbe essere in grado di fare non più di n richiesta in un determinato intervallo di tempo.

Utilizziamo congegni per l'autenticazione e non riesco a pensare a un modo semplice per identificare in modo univoco gli utenti in base alla richiesta.

Devo memorizzare l'ID utente nella sessione/cookie? Forse un hash uniq? Qual è la tua opinione sul modo migliore per farlo?

risposta

9

Capito. Devise memorizza già l'ID utente nella sessione. Il codice dovrebbe essere simile:

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 
+0

ddgd, potreste dirmi come controllare il contenuto 'richiesta type' esempio 'application/javascript' o' text/html' nel metodo 'throttled_response'? http://stackoverflow.com/questions/36304993/sync-rack-request-and-response –