Django-ratelimit не ограничивает
У меня есть проблема с использованием Django-ratelimit на heroku, что ограничитель не работает. Я не получаю никакой ошибки. Есть предложения, что я делаю не так?
views.py
from django.core.cache import cache
from ratelimit.mixins import RatelimitMixin
[...]
class LoginView(RatelimitMixin, FormView):
ratelimit_key = 'user'
ratelimit_rate = '1/5m'
ratelimit_method = 'GET'
ratelimit_block = True
template_name = "account/login.html"
template_name_ajax = "account/ajax/login.html"
form_class = LoginUsernameForm
form_kwargs = {}
redirect_field_name = "next"
@method_decorator(sensitive_post_parameters())
@method_decorator(csrf_protect)
@method_decorator(never_cache)
def dispatch(self, *args, **kwargs):
return super(LoginView, self).dispatch(*args, **kwargs)
def get(self, *args, **kwargs):
if is_authenticated(self.request.user):
return redirect(self.get_success_url())
return super(LoginView, self).get(*args, **kwargs)
Setting.py
# RATELIMIT SETTINGS
#RATELIMIT_CACHE_PREFIX = 'rl:'
RATELIMIT_ENABLE = True
RATELIMIT_USE_CACHE = 'default'
#RATELIMIT_VIEW = None
1 ответ
Просто некоторые мысли о том, что может быть не так. Пожалуйста, обратите внимание, что я никогда не использовал это приложение, я только что посмотрел на документацию ratelimit.
Изменить ratelimit_key
в ip
, вместо user
,
Поскольку он находится на странице входа, я считаю, user
ключ не будет иметь никакого эффекта, потому что он опирается на request.user
,
Вероятно, вы хотите использовать ip
вместо.
class LoginView(RatelimitMixin, FormView):
ratelimit_key = 'ip'
ratelimit_method = 'POST'
Может потребоваться изменить ratelimit_method
в POST
, По крайней мере, это будет иметь больше смысла для меня.
Узнайте больше о Ratelimit Keys - Common Keys.
PS: Поскольку вы упомянули, что ваше приложение развернуто на Heroku, может возникнуть проблема с получением IP-адреса клиента, который, вероятно, используется приложением django-ratelimt. Подробнее об этом вопросе: узнайте реальный IP-адрес клиента на Heroku.