аутентификация django: моя собственная authenticate () не вызывается - PullRequest
0 голосов
/ 27 августа 2018

У меня есть приложение django, которое отлично работает на python-3.6 / Django-1.11

Я пытаюсь заставить его работать на python-3.7, что подразумевает переход на Django-2.x, поэтому я выбрал Django-2.1

Первые проблемы, с которыми я столкнулся - скорее всего, не связанные с моей точкой зрения здесь, были:

  • переименование MIDDLEWARE_CLASSES в MIDDLEWARE и
  • удаление django.contrib.auth.middleware.SessionAuthenticationMiddleware из этого списка, поскольку оно устарело

Только с этими изменениями по сравнению с кодом, работающим для комбо 3.6 / 1.11, мой сервер django запускается достаточно хорошо, но я не могу войти.

Я использую 2 своих пользовательских бэкэнда:

AUTHENTICATION_BACKENDS = (
    'plc.plcauthbackend.PlcAuthBackend',
    'mfauth.mfbackend.ManifoldBackend',
)

Используя мой код, я обнаружил, что при попытке входа в систему:

  • фреймворк создает один экземпляр каждого класса (инструментарий __init__)
  • , но при этом ни один из этих случаев не вызывается authenticate(), (authenticate)

Я подозреваю некоторые изменения в соглашении о подписи authenticate, но, похоже, не могу найти ничего уместного в документации django об обновлении до 2.x.

Вот упрощение кода первого класса аутентификации (что в моем случае должно действительно произойти).

<snip>

class PlcAuthBackend:
    """
    Authenticate against PLCAPI
    """

    def __init__(self, plcapi_url=config_plcapi_url):
        print(f"Creating PlcAuthBackend -> {plcapi_url}")
        self.plcapi_url = plcapi_url

    # Required for your backend to work properly - unchanged in most scenarios
    def get_user(self, user_id):
        print(f"plc get_user")
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

    # This is called by the standard Django login procedure
    def authenticate(self, token=None):
        print(f"plc authenticate")
        if token is None:
            return
        <snip>

С этим кодом консоль сервера показывает сообщение «Создание PlcAuthBackend», но я не получаю упоминания о сообщении «plc authenticate», которое я ожидаю

Я бы приветствовал любую подсказку о том, как я мог бы попытаться решить эту проблему.

...