2017-03-16 3 views
0

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 

Antwort

0

mein Problem gefunden .... etwas peinlich ...

Es sollte user.is_superuser = True gewesen, nicht user.is_superadmin = True

Verwandte Themen