我在heroku上使用Django-ratelimit的问题是限制器无效。我没有收到任何错误。有什么建议我做错了吗?
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
答案 0 :(得分:1)
只是对可能出错的一些想法。请注意,我从未使用过此应用,我只是查看ratelimit's documentation。
将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应用程序使用的。阅读更多关于这个问题:Get client's real IP address on Heroku。