2016-07-27 106 views
1

我正在使用一个简单的表单,它接受用户名和密码并尝试使用ldap服务器对该用户进行身份验证。仪表板的实际门户是用php编写的,但我必须使用django(和pyldap)重写它。在我的settings.py文件中,我有以下设置(我修改了URI,因为我正在使用的公司使用该URI)。无法使用Django和ldap进行身份验证

# 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代码,用方法=“后“action =”/ login /“。 Index.html包含一个简单的“成功”消息,而error.html包含一个简单的“错误!”信息。我以我制作的表格使用我的(工作)凭证,但我无法获得成功消息。

我也试过,是这样的:

at = LDAPBackend() 
user = authenticate(username=usr, password=pas) 

,而不是在上面的代码中使用在认证方法。不幸的是,我得到了同样的行为。我错过了什么,我的错误在哪里?

回答

0

Finnaly,我设法做到了。我不得不设置这个变量:

AUTH_LDAP_USER_DN_TEMPLATE = "%(user)s" 

现在它的工作完美。我希望这可能会帮助其他人。不管怎么说,还是要谢谢你!

祝您有美好的一天!