2014-09-10 18 views
6

Ich habe eine Website mit Django erstellt. Benutzer sollten sich anmelden können. Der Login-Ansicht sieht wie folgt aus:Django Login mit Django-Achsen

from django.contrib.auth import authenticate, login 
from django.contrib.auth.models import User 
.... 
if request.method == 'POST':  
     username = request.POST['username']#get username 
     password = request.POST['txtPwd']# and password 
     user = authenticate(username=username, password=password) #checking username and pwd 
     if user is not None: 
      if user.is_active: 
       login(request, user) 

Aber mit dieser „Lösung“ i nicht eine Brute-Force-Angriff umgehen kann. Also habe ich mich umgesehen und folgendes gefunden: Throttling brute force login attacks in Django

Die erste Antwort war hilfreich. Ich habe Django-Achsen gewählt, weil Django-Rate-Limit nur die Summe der Aufrufe einer Ansicht zählt.

Aber hier ist mein Problem: Wenn ich versuche, mich mit falschem Passwort anzumelden, wird der Fehler nicht gezählt. (Nur im Bereich/admin).

Ich habe keine Option gefunden, um meine Login-Ansicht zu Django-Achsen hinzuzufügen.

So, hier ist meine Frage:

Wie kann ich django-Achsen konfigurieren, dass die fehlgeschlagene Anmeldungen von Anmeldungs-Ansicht zu behandeln?

EDIT: Hier ist meine Einstellungen-Datei:

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'axes', 
) 

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'axes.middleware.FailedLoginMiddleware' 
) 

... 

AXES_LOCK_OUT_AT_FAILURE = False 
AXES_USE_USER_AGENT = True 
AXES_COOLOFF_TIME = 1 
AXES_LOGIN_FAILURE_LIMIT = 50 
+0

Wie haben Sie django-Achsen in Ihrem Projekt verwenden? Geben Sie weitere Informationen zu Ihrer Einstellungsdatei an. –

+0

Ok, ich habe die Einstellungsdatei hinzugefügt. Ich weiß nicht wirklich, wie man es benutzt (Dies ist das Hauptproblem). Die Projekt-Website gibt keine Informationen darüber, wie sie für andere Websites verwendet werden kann. – Lee

Antwort

8

standardmäßig django-Achsen django-Login Ansicht (django.contrib.auth.views.login) verwendet. In Middleware schmücken diese Ansicht mit watch_login.

So können Sie Ihr Problem auf zwei Arten lösen:

  • Verwendung standart Login Ansicht. Auf diese Weise erfordert die Django-Achse kein zusätzliches Setup.
  • dekorieren Sie Ihre Login-Ansicht mit watch_login Dekorateur.

Zum Beispiel:

views.py 

from axes.decorators import watch_login 
... 

@watch_login 
def your_custom_login_view(request): 
    ... 
+0

Bitte beachten Sie auch, dass, wenn Ihre Ansicht Klasse ist, wird es so verwendet ' @method_decorator (watch_login, name = 'Versand') Klasse your_custom_login_view(): ' – ali