Подтвердить что ты не робот

Понимание аутентификации Django-LDAP

Я новичок в Django и им была назначена задача внедрения системы аутентификации пользователей с LDAP в качестве бэкэнд. Я полагаю, что документация предполагает, что у конечного разработчика достаточно опыта в Django, чтобы иметь возможность понять и внедрить такую ​​систему. Здесь я не понимаю, как реализовать простое приложение django с проверкой подлинности на основе LDAP. Вот что я понял до сих пор:

Публиковать изменения только в файле:

settings.py
....
import ldap
from django_auth_ldap.config import LDAPSearch

AUTH_LDAP_SERVER_URI = "ldap://<my url>" 
AUTHENTICATION_BACKENDS = ('django_auth_ldap.backend.LDAPBackend')

AUTH_LDAP_CONNECTION_OPTIONS = { 
    ldap.OPT_REFERRALS: 0
}

MIDDLEWARE_CLASSES = ( 
     ....
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    ...
)

INSTALLED_APPS = ( 
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    ....
)

auth.html

<html>
    <head>
        <title>Login</title>
    </head>
    <body>
        {{state}}
        <form action="" method="post"> {% csrf_token %}
            Email address: <input type="text" name="email" value="{{ email }}" />
            Password: <input type="password" name="password" value="" />
            <input type="submit" value="Log in" />
        </form>
    </body>
</html>

models.py:

??

views.py:

from django.shortcuts import render_to_response
from django.contrib.auth import authenticate, login
from django.template import RequestContext


def login_user(request):

    username = password = ""
    state = ""

    if request.POST:
        username = request.POST.get('username')
        password = request.POST.get('password')

        print username, password

        user = authenticate(username=username, password=password)
        if user is not None:
            login(request, user)
            state = "Valid account"
        else:
            state = "Inactive account"
    return render_to_response('auth_user/auth.html', RequestContext(request, {'state': state, 'username': username}))

Что я не могу понять?

1 > Я уверен, что мне нужно было бы реализовать функцию в views.py, чтобы получить значения POST для email и password и проверить ее, eg: [SO]. В документации указывается либо реализация поиска/привязки, либо прямого привязки. Зачем? Если views.py будет содержать фактический фрагмент кода аутентификации, каков код, указанный в документации?

2 > Если views.py выполнит фактическое auth, то зачем нам нужна переменная, указанная в документации?

3 > Автор проделал большую работу с библиотекой, но в документации не содержится простой пример использования barebone как реализовать всю систему аутентификации с помощью LDAP. Может ли кто-нибудь указать на такой ресурс, если он существует? Нелегко понять файлы, которые необходимо добавить/изменить для реализации такой системы.

4b9b3361

Ответ 1

На этой странице может быть что-то, что вы ищете: http://pythonhosted.org/django-auth-ldap/ относительно бэкэнда LDAP. Вам повезло, что он существует, поэтому вам не нужно самостоятельно кодировать собственный сервер: -)

В основном django.contrib.auth.models уже имеет объект User, который содержит все, что вам нужно о пользователе. Поэтому вам не нужно создавать новые models.py.

Вам просто нужно пройти аутентификацию себя в своих views.py, в функции входа, используя

from django.contrib.auth import authenticate, login
user = authenticate(username=request.REQUEST.get('email'), password=request.REQUEST.get('password'))
# handle error cases, inactive users, ...
login(request, user)

Если пользователь None, аутентификация завершилась неудачно. Если нет, вы можете исследовать этот объект, чтобы узнать, что вы сделали для бэкэнда.

Затем вы можете выбрать другую модель с пользователем как foreignKey, если хотите сохранить настройки, связанные с этим пользователем для этого приложения, но не часть LDAP.

В этом случае вам понадобится:

Models.py

Определение важных для вас данных на основе вашего приложения. Вы собираетесь вытащить данные пользователя из LDAP и заполнить эту модель вместе с другими настройками, связанными с пользователем:

from django.contrib.auth.models import User    

class Profile(models.Model):
    """User profile.  Contains some basic configurable settings"""
    user = models.ForeignKey(User, unique=True)
    phone_number = models.CharField(max_length=256, blank=True, default='')
    ...

Views.py

  • в функции входа в систему, если request.method == 'POST', затем get_or_create профиль пользователя, используя пользователя, которого вы только что получили от аутентификации.

    profile, profile_is_new = Profile.objects.get_or_create(user=user)
    

Ответ 2

Документы django-auth-ldap действительно написаны для разработчиков, знакомых с Django. Также LDAP. Если вы начинаете с нуля, я бы рекомендовал сделать это шаг за шагом: