这是当前的情况:我创建了一个login.html页面,我在其中输入了我的用户名和密码。在我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))