Django 1.5 和 Python 3 中的 LDAP
我正在使用Django 1.5和Python 3,对Django和LDAP都不太熟悉。
我在我的settings.py
文件中加入了以下配置(根据我的情况进行了修改),这个配置是从这里找到的:
AUTH_LDAP_SERVER_URI = "ldap://example.fr"
AUTH_LDAP_BIND_DN = 'cn=a_user,dc=example,dc=fr'
AUTH_LDAP_BIND_PASSWORD=''
AUTH_LDAP_USER_SEARCH = LDAPSearch('ou=users,dc=example,dc=fr', ldap.SCOPE_SUBTREE, '(uid=%(user)s)')
AUTH_LDAP_GROUP_SEARCH = LDAPSearch('ou=groups,dc=example,dc=fr', ldap.SCOPE_SUBTREE, '(objectClass=groupOfNames)')
AUTH_LDAP_GROUP_TYPE = ActiveDirectoryGroupType()
#Populate the Django user from the LDAP directory
AUTH_LDAP_USER_ATTR_MAP = {
'first_name': 'sAMAccountName',
'last_name': 'displayName',
'email': 'mail'
}
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend',
)
不过,我也看过这里的讨论,里面提到django-auth-ldap
模块还没有移植到Python 3上。
我有几个问题:
为了让上面的配置正常工作,
settings.py
文件中需要导入哪些模块?这些导入中哪些是Python 3不支持的?
在Django中使用Python 3实现基于LDAP的认证是否可行?是对上面方法的某种修改,还是需要其他的方法?
任何建议都很感谢。
2 个回答
虽然我来得有点晚,但现在可能有一个更好的选择适合Python 3。我开始使用这个Django应用来满足我的需求:
https://github.com/etianen/django-python3-ldap
这个应用在Python 3和ldap3这个包上运行得非常好。我目前只测试过OpenLDAP。
看起来你通过链接的讨论找到了答案,但我还是把它放在这里,以帮助任何遇到这个问题的人。
python-ldap 目前还不支持 Python3,不过有一个分支是支持的:
pip install git+https://github.com/rbarrois/python-ldap.git@py3
看起来这些改动已经被主项目接受了,但按照 django-auth-ldap 的说明来安装这个分支要简单一些,而不是去搞清楚 pypi 上哪个版本包含了这些改动。
你还需要安装 django-auth-ldap:
pip install django-auth-ldap
到这一步,你的大部分代码应该只需要两个导入就能正常工作:
import ldap
from django_auth_ldap.config import LDAPSearch
你可能还需要从某个地方导入 ActiveDirectoryGroupType,但我自己从来没有用过这个。
根据讨论,python-ldap 是一个老旧且不太稳定的代码库。我对 python3-ldap 非常满意,希望将来 django-auth-ldap 能够转向使用这个模块。