Текущая ситуация: Я создал страницу login.html, где я ввожу свое имя пользователя и пароль в форме. В моем views.py
я получаю данные POST и использую имя пользователя и пароль для аутентификации на моем сервере LDAP (работает механизм). Если имя пользователя/пароль неверно, я перенаправляется обратно на страницу входа с сообщением об ошибке. В противном случае, я перенаправляется на целевую страницу, где у меня будет сообщение вроде: «Hello Lastname, Firstname». Я могу получить имя и фамилию из запроса LDAP.Как поддерживать аутентификацию LDAP через представления Django?
Проблема:
Когда я иду к новому взгляду, то есть целевая страница, я потеряю аутентификацию. Когда я трачу request.user
, я получаю пользователь admin, который я использовал при создании моего проекта Django. Я ожидал бы, что экосистема Django_auth сделает все это для меня, но, возможно, я ошибаюсь.
Я не уверен, должен ли я помещать пользователя в сеанс, потому что я не мог найти нигде в Google, где люди используют LDAP и сеанс Django вместе.
Буду признателен за любую помощь от гуру.
Спасибо.
Редактировать с фактическим кодом:
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 с картой аутентификации Django? –
Вы используете бэкэнд аутентификации ldap, или вы «вручную» выполняете аутентификацию? –
@ Даниэль и Бурхан, спасибо за быстрый ответ. Я добавил код, который я использовал в своем проекте. Из подсказки от Burhan, я считаю, что делаю что-то вручную, и я ничего не делаю с результатом LDAP. 'request.user = user' также не полезен, поскольку изменение данных, которые вы уже получили, ничего не делает. Тогда, может быть, как я действительно использую бэкэнд аутентификации LDAP? У меня есть настройки, такие как AUTH_LDAP_SERVER, AUTH_BASE_USER и т. Д. В моем 'settings.py', и я добавил' django_ldapbackend.LDAPBackend' в мои AUTHENTICATION_BACKENDS. Оттуда я не уверен, как правильно поступать. – shailenTJ