我django-auth-ldap
用作我的后端来验证我的LDAP目录.我的所有配置都在settings.py
,我可以毫无问题地验证自己.
但是,我不知道如何搜索LDAP目录并获得与输入字段中输入的前几个字符匹配的用户列表.
我不想在视图中重复自己.我想基本上做类似的事情user_list = LDAPBackend().search(term)
,其中term是在页面上的输入字段中输入的字符串.然后我返回一个返回页面的JSON转储,user_list
以填充页面上的下拉列表.
以下是我已有的代码片段:
通过Ajax发送输入到Django视图的字符:
JS加载$(document).ready()
:
$("input#people").autocomplete({ source: "{% url 'people_search' %}", minLength: 3, select: function (event, ui) { //process selected user } });
在Django视图中接收输入的文本:
def people_search(request): term = request.GET.get('term') # term => text sent from the page user_list = [] user_list = LDAPBackend().search(term) # search does not exist. I need to populate this array with all users that match the captured term. return HttpResponse(json.dumps(user_list))
settings.py
:
# LDAP Authentication import ldap from django_auth_ldap.config import LDAPSearch, NestedGroupOfNamesType AUTH_LDAP_SERVER_URI = 'ldap://mydomain.com:3268' AUTH_LDAP_BIND_DN = 'my_uname' AUTH_LDAP_BIND_PASSWORD = 'my_pass' AUTH_LDAP_USER_SEARCH = LDAPSearch("DC=site,DC=domain,DC=com", ldap.SCOPE_SUBTREE, "(&(objectClass=*)(sAMAccountName=%(user)s))") AUTH_LDAP_GROUP_SEARCH = LDAPSearch("DC=site,DC=domain,DC=com", ldap.SCOPE_SUBTREE, "(objectClass=group)") AUTH_LDAP_GROUP_TYPE = NestedGroupOfNamesType() AUTH_LDAP_CONNECTION_OPTIONS = { ldap.OPT_DEBUG_LEVEL: 0, ldap.OPT_REFERRALS: 0, } AUTH_LDAP_USER_ATTR_MAP = { "first_name": "givenName", "last_name": "sn", "email": "mail", } AUTH_LDAP_PROFILE_ATTR_MAP = { "employee_id": "employeeID", } AUTH_LDAP_ALWAYS_UPDATE_USER = True AUTH_LDAP_FIND_GROUP_PERMS = True
注意:视图people_search
由装饰@login_required
.如果我未经过身份验证,我将被重定向到我能够成功执行的登录页面user = LDAPBackend().authenticate(username=username, password=password)
我AUTH_LDAP_USER_SEARCH
在settings.py中看到,但我不确定如何使用它.文档对我没有帮助.
另外,理想情况下,我想尽快进行搜索.在Microsoft Outlook中,我能够快速搜索LDAP目录.我相信所有用户都在我的计算机上缓存.我可以将所有用户缓存在我的Django服务器上.
谢谢您的帮助.