Wir können dies tun, indem wir unser eigenes Email-Authentifizierungs-Backend implementieren.
Sie können wie unten etwas tun:
Step-1 Substite die benutzerdefinierte User-Modell in den Einstellungen:
Da wir nicht für die Authentifizierung Djangos Standard User
Modell würde verwenden, müssen wir definieren unsere Gewohnheit MyUser
Modell in settings.py
. Geben Sie in den Projekteinstellungen MyUser
als AUTH_USER_MODEL
an.
AUTH_USER_MODEL = 'myapp.MyUser'
Step-2, die Logik für den benutzerdefinierten Authentifizierungs-Backend schreiben:
eigenen Authentifizierungs-Backend zu schreiben, müssen wir atleast zwei Methoden heißt get_user(user_id)
und authenticate(**credentials)
implementieren.
from django.contrib.auth import get_user_model
from django.contrib.auth.models import check_password
class MyEmailBackend(object):
"""
Custom Email Backend to perform authentication via email
"""
def authenticate(self, username=None, password=None):
my_user_model = get_user_model()
try:
user = my_user_model.objects.get(email=username)
if user.check_password(password):
return user # return user on valid credentials
except my_user_model.DoesNotExist:
return None # return None if custom user model does not exist
except:
return None # return None in case of other exceptions
def get_user(self, user_id):
my_user_model = get_user_model()
try:
return my_user_model.objects.get(pk=user_id)
except my_user_model.DoesNotExist:
return None
Step-3 Geben Sie den benutzerdefinierten Authentifizierungs-Backend in Einstellungen:
Nach der benutzerdefinierten Authentifizierung backend Schreiben spezifizieren diese Authentifizierungs-Backend im AUTHENTICATION_BACKENDS
Einstellung.
AUTHENTICATION_BACKENDS
enthält die Liste der zu verwendenden Authentifizierungs-Backends. Django versucht sich über alle Authentifizierungs-Backends hinweg zu authentifizieren. Wenn die erste Authentifizierungsmethode fehlschlägt, versucht Django die zweite und so weiter, bis alle Backends versucht wurden.
AUTHENTICATION_BACKENDS = (
'my_app.backends.MyEmailBackend', # our custom authentication backend
'django.contrib.auth.backends.ModelBackend' # fallback to default authentication backend if first fails
)
Wenn die Authentifizierung per MyEmailBackend
d.h Benutzer nicht nicht über email
authentifiziert werden kann, dann verwenden wir den Standard-Authentifizierung ModelBackend
des Django, die über username
Feld MyUser
Modell werden versuchen, zu authentifizieren.
Ich erstellte ähnliche benutzerdefinierte Authentifizierung Backend jetzt möchte ich E-Mail und Telefonnummer Felder auch während der Anmeldung in diese Methode. Aber ich bekomme nur Benutzername und Passwort Feld kwargs ist leer Irgendeine Idee, wie man alle Felder bekommt? – Kishan
Können Sie den Beispielcode posten, den Sie versuchen? –