Как указано в комментариях felix001 , проектная документация описывает флаг AUTH_LDAP_NO_NEW_USERS
:
Запретить создание новых пользователей во время аутентификации. Любые пользователи, которых еще нет в базе данных пользователей Django, не смогут войти.
Включение его в настройках включает желаемое поведение:
# settings.py
...
AUTH_LDAP_NO_NEW_USERS = True
Однако эта функция не включена в текущую версию 1.7.0, поэтому необходим обратный порт. Наименее инвазивный импл, о котором я могу думать, это:
# myapp/backend.py
from django_auth_ldap import backend as ldap_backend
# backport for AUTH_LDAP_NO_NEW_USERS setting
ldap_backend.LDAPSettings.defaults.update(NO_NEW_USERS=False)
class MyLDAPBackend(ldap_backend.LDAPBackend):
def get_or_build_user(self, username, ldap_user):
user, built = super().get_or_build_user(username, ldap_user)
if self.settings.NO_NEW_USERS and built: # user was not found in local db and created instead
raise ldap_user.AuthenticationFailed(
f'username {username} does not exist in local DB.'
)
return user, built
Активируйте AUTH_LDAP_NO_NEW_USERS
в настройках и используйте пользовательский бэкэнд вместо LDAPBackend
на данный момент:
# myapp/settings.py
AUTH_LDAP_NO_NEW_USERS = True
AUTHENTICATION_BACKENDS += ('myapp.backend.MyLDAPBackend',)
Сбросить бэкпорт также легко: как только выйдет следующая версия django-auth-ldap
, единственное, что вам нужно будет адаптировать - это кортеж AUTHENTICATION_BACKENDS
(и, конечно, удалить модуль myapp/backend.py
).