Аутентификация Django Ldap Полный пример
Я частично понял аутентификацию Django Ldap. Может кто-нибудь привести полный пример разработки очень простого приложения, использующего Django Authentication Ldap.
Я пролистал этот ресурс и попытался понять многие вещи, но до сих пор не могу понять, как использовать его в реализации. Как создать пользовательскую модель, которая будет использоваться вместе с классом LdapBackend, и как написать много вещей в методе authenticate() и т. Д.
2 ответа
Здесь вы можете увидеть полный пример очень хорошо руководствуясь, показывая, как создать пользовательский LDAPBackend
,
Вам необходимо настроить параметры LDAP в settings.py
(как показано в ссылке, которую вы разместили) и добавьте свой LDAPBackend
в AUTHENTICATION_BACKENDS
, Вы можете использовать предоставленный LDAPBackend по умолчанию или создать собственный и использовать его.
Использование по умолчанию LDAPBackend
предоставлено django-auth-ldap
:
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'django.contrib.auth.backends.ModelBackend',
)
Использование пользовательских LDAPBackend
если вам нужно добавить дополнительную логику для аутентификации:
AUTHENTICATION_BACKENDS = (
'accounts.backends.MyLDAPBackend',
'django.contrib.auth.backends.ModelBackend',
)
Затем в accounts/backends.py
:
from django_auth_ldap.backend import LDAPBackend
class MyLDAPBackend(LDAPBackend):
""" A custom LDAP authentication backend """
def authenticate(self, username, password):
""" Overrides LDAPBackend.authenticate to add custom logic """
user = LDAPBackend().authenticate(self, username, password)
""" Add custom logic here """
return user
Проверьте приведенный выше пример для получения более подробной информации.
Если вы новичок в LDAP, я бы порекомендовал взглянуть на этот ответ (и другой тоже) в другом вопросе по этой теме.
Примечание: синтаксис django_auth_ldap изменился. Вместо переопределения вам нужно переопределить
authenticate_ldap_user
https://django-auth-ldap.readthedocs.io/en/latest/custombehavior.html
def authenticate_ldap_user(self, username, password):
""" Overrides LDAPBackend.authenticate to save user password in django """
user = LDAPBackend.authenticate_ldap_user(self, username, password)
# If user has successfully logged in, save password in django database
if user:
user.set_password(password)
user.save()
return user
Я часами корил себя (кашель, дни кашля), задаваясь вопросом, почему мой обычай
authenticate
не вызывался, пока я не нашел эту страницу readthedocs.io.