背景:私は私のDjangoのアプリでレート制限のための多目的django-brakeを使用してい拡張ログイン機能(Djangoプロジェクト)
。私は今私のアプリで無差別なログイン試行を制限するように設定する必要があります。
これを行う方法は、login
ビューをデコレータratelimit(field='username')
で飾り、ビュー内にwas_limited = getattr(request, 'limited', False)
を追加することです。 was_limited
は、同じユーザー名(OR IP)が5回以上使用される場合はTrue
です。一つは、その後など、ユーザーを怒らリダイレクトすることができ
SCENARIO:
現在、私はdjango.contrib.auth.views
でlogin
機能を使用しています。私はこの機能を私のurls.pyで飾ることができます。しかし、私はその方法の中にwas_limited = getattr(request, 'limited', False)
を含めることはできません。それは重要なことです。そのフラグが一度しかTrue
であると、問題のユーザーに対して措置を講じることができます。
QUESTION:
だから、私は上記の機能を含めるには、この機能を飾るし、拡張するための最良の方法は何ですか?すべてを無効にする必要がありますか?お知らせ下さい。私は直接django.contrib.auth.views
に必要なコードを書くことができますが、それはハックです。
初心者であるので、私はこのような状況に対処する最善の方法を考え出しています。説明的な例が良いでしょう。参考のため
、私は以下のdjango.contrib.auth.views.login
を含めている:
@sensitive_post_parameters()
@csrf_protect
@never_cache
def login(request, template_name='registration/login.html',
redirect_field_name=REDIRECT_FIELD_NAME,
authentication_form=AuthenticationForm,
current_app=None, extra_context=None):
"""
Displays the login form and handles the login action.
"""
redirect_to = request.REQUEST.get(redirect_field_name, '')
if request.method == "POST":
form = authentication_form(data=request.POST)
if form.is_valid():
# Ensure the user-originating redirection url is safe.
if not is_safe_url(url=redirect_to, host=request.get_host()):
redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)
# Okay, security check complete. Log the user in.
auth_login(request, form.get_user())
if request.session.test_cookie_worked():
request.session.delete_test_cookie()
return HttpResponseRedirect(redirect_to)
else:
form = authentication_form(request)
request.session.set_test_cookie()
current_site = get_current_site(request)
context = {
'form': form,
redirect_field_name: redirect_to,
'site': current_site,
'site_name': current_site.name,
}
if extra_context is not None:
context.update(extra_context)
return TemplateResponse(request, template_name, context,
current_app=current_app)
ああいいえ。 'was_limited'フラグにアクセスできない限り、実際にリダイレクトすることはできません。レートリミットに達すると、フラグは「True」に変わります。 –