Ich verwende ein benutzerdefiniertes Authentifizierungs-Backend mit Django, um automatisch Benutzer aus einem Altsystem zu erstellen und anzumelden. Mein Backend
Klasse ist dies:
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
from sfi.models import Employee
import base64, hashlib
class SFIUserBackend(ModelBackend):
def authenticate(self, username=None, password=None):
if not username or not password:
return
digest = base64.standard_b64encode(hashlib.md5(password).digest())
user = None
try:
employee = Employee.objects.get(login=username, passwd=digest)
user, created = User.objects.get_or_create(username=username)
if created:
# setting attributes
user.first_name = employee.names[:30]
user.last_name = employee.surnames[:30]
user.is_staff = True
user.save()
except Employee.DoesNotExist:
pass
return user
Bis jetzt funktioniert es gut. Ich muss jedoch die Backend-Klasse des aktuell angemeldeten Benutzers in einer Vorlage lesen.
Verwendung von request.user.backend
sagt, dass user
hat nicht das Attribut backend... und ich kann es nicht aus der Sitzung lesen (mit request.session._auth_user_backend
), weil das Django-Vorlagensystem sich beschwert, dass "Variablen und Attribute nicht mit Unterstrichen beginnen dürfen".
Ich verwende django.contrib.auth.views.login
um den Benutzern die Anmeldung zu ermöglichen. Was übersehe ich?