Ich habe die RemoteUserBackend-Klasse von Django kopiert und geändert, um zu überprüfen, ob sich der Remotebenutzer, der eine Verbindung herstellt, in einer bestimmten LDAP-Gruppe befindet, bevor die Authentifizierung fortgesetzt wird. Wenn der Benutzer sich nie angemeldet hat, bevor der Benutzer in der Datenbank von Django eingetragen ist. Ich versuche herauszufinden, wie man die Felder first_name, last_name und email setzt und den User-Kram und ein Superadmin macht. Dies ist der Code, den ich habe. Es ist Teil der RemoteUserBackend-Klasse. Ich mache etwas falsch. Die LDAP-Suche ist in Ordnung, aber der Benutzer wird nicht geändert.So passen Sie Benutzer während der RemoteUserBackend-Authentifizierung an
def configure_user(self, user):
"""
Configures a user after creation and returns the updated user.
By default, returns the user unmodified.
"""
con = ldap.initialize(settings.AUTH_LDAP_SERVER_URI)
bind_dn = settings.AUTH_LDAP_BIND_DN
bind_pw = settings.AUTH_LDAP_BIND_PASSWORD
con.simple_bind_s(bind_dn, bind_pw)
base_dn = settings.AUTH_LDAP_USER_DN
attrs = ['givenName', 'sn', 'mail']
filter = '(SAMAccountName={0})'.format(user.username)
ldap_user = con.search_s(base_dn, ldap.SCOPE_SUBTREE, filter, attrs)
givenName = ldap_user[0][1]['givenName'][0].decode('utf-8')
sn = ldap_user[0][1]['sn'][0].decode('utf-8')
mail = ldap_user[0][1]['mail'][0].decode('utf-8')
user.is_staff = True
user.is_superadmin = True
user.first_name = givenName
user.last_name = sn
user.email = mail
user.save()
return user