python - 从 LDAP 预填充 Django 用户
问题描述
我正在使用 Django Auth LDAP 对我的 django 应用程序进行身份验证。但是,在用户尝试登录之前不会创建用户对象。
所以我试图从 ldap 预填充所有用户,但目前它没有填充除名称和用户名之外的任何字段。不是电子邮件,不是 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}')
推荐阅读
- javascript - 测试脚本是否正在由交互式调试器运行
- javascript - javascript keydown 事件无法识别此组合键
- angular - 嵌入式 Angular 元素(自定义元素或 Web 组件)
- google-cloud-bigtable - Rowkey 搜索与 RowKeyRegexFilter
- python - 如何优化 NLTK pos_tag 操作?
- wordpress - 我如何让附属公司使用以前注册的附属公司的有效 ID 进行注册
- javascript - html 网页中的表情符号选择器
- postgresql - 错误:设置默认权限时在“FROM”处或附近出现语法错误
- python - 无法从源 pylance 解析导入烧瓶
- javascript - Vue.js 2 Watch 不适用于来自另一个组件的道具更新