从LDAP预填充Django用户



我正在使用Django Auth LDAP对我的Django应用程序进行身份验证。但是,直到用户尝试登录时才创建user对象。

所以我试图从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实例,但不保存它,因此您需要获取该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}')

最新更新