Я создал собственный бэкэнд для своего приложения, чтобы люди могли войти в систему с помощью ldap.Похоже, что все работает, кроме одной вещи: я проверяю, есть ли в шаблоне user.is_authenticated, чтобы показать кнопку «Выйти» для аутентифицированных пользователей, и кажется, что она все время возвращает false.
Я использую стандартный django LoginView.До того, как я добавил свой пользовательский бэкэнд, все работало просто отлично, и я переписал функцию "authenticate ()" так, как это написано в django docs.
Как я мог это исправить?
Мой бэкэнд:
class MyBackEnd(object):
"""
This is the custom backend to authenticate the user in the DB.
if this authentication fais then django default authentication will get called
"""
def authenticate(self, request, username, password):
#here comes server address and search templates
try:
return User.objects.get(username=username)
except User.DoesNotExist:
try:
l = ldap.initialize(server)
l.protocol_version = 3
l.set_option(ldap.OPT_REFERRALS, 0)
l.simple_bind_s(username, password)
r = l.search(base, scope, filter, attrs)
type, user = l.result(r, 60)
if len(user) == 1:
user = User.objects.create_user(username=username, password=password)
user.save()
return user
except:
print("Failed to connect with ldap")
return None
def get_user(self, user_id):
try:
return User.objects.get(username=user_id)
except User.DoesNotExist:
return None