2010-08-15 17 views
8

Chcę wykonać następujące czynności z uwierzytelnianiem Django:jak uzyskać dostęp do żądania w backendu niestandardowego uwierzytelniania django?

  • Zaloguj niepoprawne dziennika w próbach
  • Rachunki Tymczasowo blokady po „x” liczby nieprawidłowych Zaloguj prób
  • Zaloguj udanych wejść.

Myślałem, że niestandardowy serwer uwierzytelniania będzie rozwiązaniem.

Mogę zrobić większość tego, co chcę, ale chcę zalogować IP i REMOTE_HOST użytkownika, który podjął próbę.

Jak mogę uzyskać dostęp do obiektu żądania w backendu auth?

Dzięki

Odpowiedz

10

Backend uwierzytelniania może przyjąć dowolną liczbę parametrów niestandardowych dla metody authenticate(). Na przykład:

class MyBackend: 
    def authenticate(self, username=None, password=None, request=None): 
     # check username, password 
     if request is not None: 
      # log values from request object 

Jeśli dzwonisz uwierzytelniania w swoim własnym zdaniem, można przekazać obiekt żądanie:

from django.contrib.auth import authenticate 

def login(request): 
    # discover username and password 
    authenticate(username=username, password=password, request=request) 
    # continue as normal 

Jeśli używasz widoku logowania Django (lub login administratora), należy nie będę miał dodatkowych informacji. Mówiąc prosto, będziesz musiał użyć własnego, niestandardowego widoku logowania.

Należy również zachować ostrożność podczas automatycznego blokowania kont: pozwalasz komuś świadomie zablokować jedno z kont użytkownika (odmowa usługi). Są na to różne sposoby. Upewnij się także, że dziennik niepoprawnych prób nie zawiera żadnych prób wprowadzenia hasła.

+0

Rozszerzam ModelBackend - python nie pozwala mi przeciążać metod, prawda? Jaki byłby dobry sposób na osiągnięcie tego? Wystarczy zmienić nazwę metody "uwierzytelniania" i wywołać to w moim widoku? – Roger

+0

co muszę umieścić w widoku logowania? po prostu skopiować cały bieżący widok logowania contrib.auth? Nie rozumiem, ponieważ ta metoda nigdy nie nazywa "uwierzytelniania" ... – Roger

+0

Z pewnością można przeciążać w python. 'contrib.auth' wymaga, aby backendy miały metodę" authenticate ", więc musisz to tak nazwać. –

Powiązane problemy