我使用的是一个带有用户名和密码的简单表单,并尝试使用ldap服务器对该用户进行身份验证。仪表板的实际门户是用PHP编写的,但我必须使用django(和pyldap)重写它。在我的settings.py文件中,我进行了以下设置(我修改了URI,因为我正在工作的公司使用它。)
# LDAP Settings
# Set backends
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
)
# LDAP Server
AUTH_LDAP_SERVER_URI = 'ldaps://eddie.xy.zzzzz.com:3268'
AUTH_LDAP_START_TLS = True
# Search settings
AUTH_LDAP_BIND_DN = ""
AUTH_LDAP_BIND_PASSWORD = ""
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=xy,dc=zzzzz,dc=com", ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
在我的views.py中,我有以下代码(仅用于测试)
from django.shortcuts import render
from django.contrib.auth import authenticate
from django_auth_ldap.backend import LDAPBackend # Greyed out
def login(request):
if request.method == 'POST':
# Get info from POST request
usr = request.POST['username']
pas = request.POST['password']
# Authenticate the user using provided data
user = authenticate(username=usr, password=pas)
print(str(user))
if user is not None:
return render(request, 'dashboard/index.html', {})
else:
print("The username and password were incorrect.")
return render(request, 'dashboard/error.html', {})
elif request.method == 'GET':
return render(request, 'dashboard/login.html', {})
login.html包含一个带有表单的简单HTML代码,其中method =“post”action =“/ login /”。 Index.html包含一个简单的“成功”消息,而error.html包含一个简单的“错误!”信息。我正在以我的形式使用我的(工作)凭证,但我无法获得成功消息。
我也尝试过,是这样的:
at = LDAPBackend()
user = authenticate(username=usr, password=pas)
代替上面代码中使用的authenticate方法。不幸的是,我得到了同样的行为。我错过了什么,我的错误在哪里?
答案 0 :(得分:0)
Finnaly,我设法做到了。我必须设置这个变量:
AUTH_LDAP_USER_DN_TEMPLATE = "%(user)s"
现在它工作得很好。我希望这可能会帮助其他人。不管怎样,谢谢!
祝你有个美好的一天!