python / intermediate
Snippet
Django Authentifizierungs-Backend Benutzerdefinierte Implementierung
Benutzerdefinierte Authentifizierungs-Backends ermöglichen Django die Authentifizierung gegen alternative Benutzerspeicher oder verschiedene Anmeldedaten. Jedes Backend muss authenticate() implementieren und optional get_user(). Die authenticate Methode empfängt Anmeldedaten und gibt ein Benutzerobjekt oder None zurück. Mehrere Backends können in AUTHENTICATION_BACKENDS konfiguriert werden um verschiedene Login-Methoden gleichzeitig zu unterstützen.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from django.contrib.auth.backends import BaseBackendfrom django.contrib.auth import get_user_modelclass EmailAuthenticationBackend(BaseBackend):def authenticate(self, request, username=None, password=None, **kwargs):User = get_user_model()try:user = User.objects.get(email=username)except User.DoesNotExist:return Noneif user.check_password(password):return userreturn Nonedef get_user(self, request, user_id):User = get_user_model()try:return User.objects.get(pk=user_id)except User.DoesNotExist:return Noneclass StaffMemberBackend(BaseBackend):def authenticate(self, request, username=None, password=None, **kwargs):if not request or not request.user:return Noneif not request.user.is_staff:return NoneUser = get_user_model()try:user = User.objects.get(pk=username)if user.check_password(password):return userexcept User.DoesNotExist:return Nonereturn None
django
Erklärung
1
class EmailAuthenticationBackend(BaseBackend):
Benutzerdefiniertes Backend erbend von BaseBackend
2
def authenticate(self, request, username=None, password=None):
Authentifiziere mit E-Mail als Benutzername statt Benutzernamenfeld
3
User = get_user_model()
Aktives Benutzermodell holen um benutzerdefinierte Benutzermodelle zu unterstützen
4
user = User.objects.get(email=username)
Benutzer per E-Mail-Adresse nachschlagen
5
if user.check_password(password):
Djangos sichere Passwortprüfungsmethode verwenden
6
def get_user(self, request, user_id):
Erforderliche Methode um Benutzer für Sitzungswiederherstellung per Primärschlüssel abzurufen
7
class StaffMemberBackend(BaseBackend):
Zweites benutzerdefiniertes Backend für Mitarbeiter-Impersonierung
8
if not request.user.is_staff:
Nur Mitarbeiter-Benutzer dürfen diese Authentifizierungsmethode verwenden