Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何跨Django视图维护LDAP身份验证?_Python_Django_Authentication_Ldap - Fatal编程技术网

Python 如何跨Django视图维护LDAP身份验证?

Python 如何跨Django视图维护LDAP身份验证?,python,django,authentication,ldap,Python,Django,Authentication,Ldap,目前的情况如下: 我创建了一个login.html页面,在其中以表单形式输入用户名和密码。在myviews.py中,我获取POST数据,并使用用户名和密码对LDAP服务器进行身份验证(机制工作)。如果用户名/密码错误,我将被重定向回登录页面并显示错误消息。否则,我会被重定向到一个登录页,在那里我会收到一条类似“Hello Lastname,Firstname”的消息。我能够从LDAP查询中获得名字和姓氏 问题: 当我转到新视图(即登录页)时,我将丢失身份验证。当我跟踪request.user时,

目前的情况如下: 我创建了一个login.html页面,在其中以表单形式输入用户名和密码。在my
views.py
中,我获取POST数据,并使用用户名和密码对LDAP服务器进行身份验证(机制工作)。如果用户名/密码错误,我将被重定向回登录页面并显示错误消息。否则,我会被重定向到一个登录页,在那里我会收到一条类似“Hello Lastname,Firstname”的消息。我能够从LDAP查询中获得名字和姓氏

问题:

当我转到新视图(即登录页)时,我将丢失身份验证。当我跟踪
request.user
时,我得到了在创建Django项目时使用的管理员用户。我希望Django_auth生态系统能为我做这一切,但也许我错了

我不确定是否应该将用户放在会话中,因为我在Google上找不到任何地方可以同时使用Django的LDAP和会话

我非常感谢那些大师们的帮助

谢谢

使用实际代码编辑:

def login(request):
    error = False
    DN = 'None'
    user = 'None'
    user_attr = 'None'
    if request.method == 'POST': #if form has been submitted
        DN = request.POST['login']
        PWD = request.POST['password']
        DN_FULL_EMAIL = DN + '@'+user_domain+'.mysite.com'
        print 'DN_FULL_EMAIL', DN_FULL_EMAIL
        try:
            l = ldap.initialize('ldap://mysite.com:3268')
            print 'bind_res = ' , l.simple_bind_s(DN_FULL_EMAIL, PWD)
            BASE_DN = 'DC=eng,DC=mysite,DC=com'
            SCOPE = ldap.SCOPE_SUBTREE
            Filter = '(&(objectClass=person)(sAMAccountName='+DN+'*)(objectClass=organizationalPerson)(objectClass=user))'
            Attrs = ['displayName', 'employeeID'] #The only data we need

            r= l.search_ext(BASE_DN, SCOPE, Filter, Attrs)
            Type, user = l.result(r,10)
            if user :
                Name, Attrs = user[0]
                if hasattr(Attrs, 'has_key') and Attrs.has_key('displayName') and Attrs.has_key('employeeID'):
                    displayName = Attrs['displayName'][0]
                    WWID = Attrs['employeeID'][0]
                request.user = user
                user_attr = Attrs
                return HttpResponseRedirect('/', {  'user' : user,
                                                    'user_attr' : user_attr
                                                })

        except ImportError:
            error = True
            pass
        except ldap.INVALID_CREDENTIALS:
            error = True
            pass
    return render_to_response( 'login.html', {
        'error' : error,
        'user' : user,
        'user_attr' : user_attr
        }, context_instance = RequestContext(request))

您几乎肯定希望使用LDAP身份验证后端,如。如果后端安装和配置正确,则视图不需要任何特定于LDAP的代码。如果您遇到了麻烦,请不要害怕重新开始并从一开始就遵循后端的文档。

现在您已经使用python LDAP手动实现了LDAP身份验证,您所需要知道的就是如何跨不同视图使用会话

幸运的是,Django提供了关于它的好文档:

示例代码:

request.session['name'] = 'Jack'  # set
name = request.session['name']    # get

你没有提供足够的信息来解决这个问题。您如何处理LDAP身份验证的结果?您是否使用库将LDAP与Django的身份验证框架集成?您是使用LDAP身份验证后端,还是“手动”进行身份验证?@Daniel和Burhan,感谢您的快速响应。我添加了我在项目中使用的代码。从Burhan的提示来看,我相信我是在手动操作,而不是真正使用LDAP的结果
request.user=user
也没有用,因为更改您已经收到的数据不会起任何作用。那么也许,我该如何真正使用LDAP认证后端呢?在我的
settings.py
中确实有像AUTH\u LDAP\u SERVER、AUTH\u BASE\u USER等设置,并且我在我的身份验证\u后端中添加了
django\u ldapbackend.ldapbackend
。从那以后,我不知道如何正确地做事情。在发布这个问题后不久,我转到了
django auth ldap
。我的
settings.py中有所有LDAP设置。在我的
login.html
中,我有一个用户名/密码表单。单击“登录”时,POST数据将发送到my
views.py中的相应方法。大问题:使用my
settings.py
中的设置,我在LDAP服务器上如何进行身份验证?谢谢你的支持!只需使用标准的djangoapi()。django.contrib.auth甚至包括一个标准的登录视图,因此您不必为简单的情况编写任何视图代码。