user.is_authenticated возвращает False с пользовательским бэкэндом - PullRequest
0 голосов
/ 21 декабря 2018

Я создал собственный бэкэнд для своего приложения, чтобы люди могли войти в систему с помощью 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

1 Ответ

0 голосов
/ 21 декабря 2018

В функции get_user:

return User.objects.get(username=user_id)

Является ли username первичным ключом в модели пользователя?Попробуйте заменить следующую строку следующим образом:

return User.objects.get(pk=user_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...