Предварительное заполнение Django пользователями из LDAP

Я использую Django Auth LDAP для аутентификации в моем приложении django. Однако объект пользователя не создается до тех пор, пока пользователь не попытается войти в систему.

Итак, я пытаюсь предварительно заполнить всех пользователей из ldap, но в настоящее время он не заполняет никаких полей, кроме имени и имени пользователя. Не email, не is_superuser и т.д.

Код для получения списка имен пользователей, затем попытка заполнить пользователей:

from django_auth_ldap.backend import LDAPBackend

l = ldap.initialize(LDAP_SERVER_URI)
l.protocol_version = ldap.VERSION3
l.simple_bind(LDAP_BIND_DN, LDAP_BIND_PASS)

search_filter = LDAP_USER_SEARCH_FILTER
attributes = ['*']

backend = LDAPBackend()
results = l.search_s(LDAP_USER_SEARCH_BASE, ldap.SCOPE_SUBTREE, search_filter, attributes)
return Response(results)
for query, u in results:
    username = u[LDAP_ATTR_USERNAME][0].decode('utf-8')
    user, created = backend.get_or_build_user(username, u)
    if created:
        user.save()
    backend.populate_user(username)
    log.debug(f'Pre-populate: {user}, {user.email}')

Как я могу создать всех пользователей и правильно установить их информацию, как если бы они вошли в систему с помощью django-auth-ldap, без необходимости входа в систему?


Редактирование: Добавлены переменные карты

AUTH_LDAP_USER_ATTR_MAP = {
    'first_name': LDAP_ATTR_FIRST_NAME,
    'last_name': LDAP_ATTR_LAST_NAME,
    'email': LDAP_ATTR_EMAIL,
}

AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    "is_staff": LDAP_STAFF_GROUP,
    "is_superuser": LDAP_SUPERUSER_GROUP,
}

backend.populate_user(username) обновляет и возвращает экземпляр User, но не сохраняет его, поэтому вам нужно получить этого пользователя и сохранить его:

for query, u in results:
    username = u[LDAP_ATTR_USERNAME][0].decode('utf-8')
    user, created = backend.get_or_build_user(username, u)
    if created:
        user.save()
    user = backend.populate_user(username)
    user.save()
    log.debug(f'Pre-populate: {user}, {user.email}')
Вернуться на верх