Problem mit benutzerdefiniertem Authentifizierungs-Backend für Django

Ich habe ein Problem mit einem benutzerdefinierten Authentifizierungs-Backend, das ich für ein Active Directory über LDAP-Authentifizierung erstellt habe.

Das Problem besteht darin, dass ich von der Administratoranmeldeseite aus, nachdem der neue Benutzer ordnungsgemäß authentifiziert und in der Datenbank erstellt wurde (oder seine Informationen vom LDAP-Server aktualisiert wurden), zur Administratoranmeldeseite zurückkomme und darauf hinweise, dass ich keine gültige eingegeben habe Benutzername und Passwort.

Was mache ich falsch, wenn der Benutzer in der Django-Datenbank authentifiziert und aktualisiert wird?

Der Code:

import ldap
import re
from django.conf import ad_settings
grps = re.compile(r'CN=(\w+)').findall

def anyof(short_group_list, adu):
    all_groups_of_user = set(g for gs in adu.get('memberOf',()) for g in grps(gs))
    return any(g for g in short_group_list if g in all_groups_of_user)

class ActiveDirectoryBackend(ModelBackend):
    """
    This backend utilizes an ActiveDirectory server via LDAP to authenticate
    users, creating them in Django if they don't already exist.
    """

    def authenticate(self, username=None, password=None):
        con = None
        ldap.set_option(ldap.OPT_REFERRALS, 0)
        try:
            con = ldap.initialize('ldap://%s:%s' % (ad_settings.AD_DNS_NAME,
                  ad_settings.AD_LDAP_PORT))
            con.simple_bind_s(username+"@"+ad_settings.AD_DNS_NAME, password)
            ADUser = con.search_ext_s(ad_settings.AD_SEARCH_DN,
                                      ldap.SCOPE_SUBTREE,
                                      "sAMAccountName=%s" % username,
                                      ad_settings.AD_SEARCH_FIELDS)[0][1]
            con.unbind()
        except ldap.LDAPError:
            return None
        # Does user belong to appropriate AD group?
        if not anyof(ad_settings.PROJECTCODE,ADUser):
            return None

        # Does user already exist in Django?
        try:
            user = User.objects.get(username=username)
        except User.DoesNotExist:
            #create Django user
            user = User(username=username, is_staff = True, is_superuser = False)
        #Update User info from AD
        if ADUser.has_key('givenName'):
            user.first_name = ADUser.get('givenName')[0]
        if ADUser.has_key('sn'):
            user.last_name = ADUser.get('sn')[0]
        if ADUser.has_key('mail'):
            user.email = ADUser.get('mail')[0]

        # Does not store password in Django.
        user.set_unusable_password()
        user.save()
        return user

EDIT: Herausgefunden. Benutzer können sich nur anmelden, wenn sie aktiv sind (obwohl dies in der Dokumentation nicht angegeben ist). Daher sollte in dem angegebenen Code die Zeile, die den neuen Benutzer erstellt, folgendermaßen aussehen:

        user = User(username=username, is_staff = True, is_Active = True, 
                    is_superuser = False)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage