Django-ratelimit не ограничивает

У меня проблема с использованием Django-ratelimit на героку, что ограничитель не работает. Я не получаю никакой ошибки. Любые предложения, что я делаю неправильно?

просмотры.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)

Настройка.py

# RATELIMIT SETTINGS
#RATELIMIT_CACHE_PREFIX = 'rl:'
RATELIMIT_ENABLE = True
RATELIMIT_USE_CACHE = 'default'
#RATELIMIT_VIEW = None

person ElHombre    schedule 15.02.2018    source источник
comment
как вы решили эту проблему?   -  person Sachin Singh    schedule 30.01.2020


Ответы (1)


Просто некоторые мысли о том, что может быть не так. Обратите внимание, что я никогда не использовал это приложение, я просто просмотрел документация по ratelimit.

Измените ratelimit_key на ip вместо user.

Поскольку это страница входа в систему, я считаю, что ключ user не будет иметь никакого эффекта, потому что он зависит от request.user.

Вероятно, вместо этого вы хотите использовать ip.

class LoginView(RatelimitMixin, FormView):
    ratelimit_key = 'ip'
    ratelimit_method = 'POST'

Возможно, вам потребуется изменить ratelimit_method на POST. По крайней мере, для меня это имело бы больше смысла.

Подробнее читайте в разделе Ключи ограничения скорости — общие ключи.

PS: Поскольку вы упомянули, что ваше приложение развернуто на Heroku, может возникнуть проблема с получением IP-адреса клиента, который, вероятно, используется приложением django-ratelimt. Подробнее об этом вопросе SO: Получить реальный IP-адрес клиента на Heroku .

person Vitor Freitas    schedule 15.02.2018