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 サーバーにすべてのユーザーをキャッシュしても問題ありません。
ご協力いただきありがとうございます。