6

django-auth-ldapLDAP ディレクトリへの認証にバックエンドとして使用しています。すべての構成が入って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_SEARCHsettings.pyにあるのですが、使い方がわかりません。ドキュメントはあまり役に立ちませんでした。

また、理想的には、検索をできるだけ高速にしたいと考えています。Microsoft Outlook では、LDAP ディレクトリをすばやく検索できます。すべてのユーザーが私のコンピューターにキャッシュされていると思います。Django サーバーにすべてのユーザーをキャッシュしても問題ありません。

ご協力いただきありがとうございます。

4

1 に答える 1

-3

オブジェクト名が不明であるがオブジェクト名の一部の文字がわかっている場合にオブジェクトを検索するには、可能な限り低い検索範囲を使用し、部分文字列フィルターを使用します。以下のフィルターは部分文字列フィルターです。

(cn=shail*)

こちらもご覧ください

于 2013-09-20T16:44:03.733 に答える