Django - Authenticate возвращает None, несмотря на AUTHENTICATION_BACKENDS - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь войти в систему, используя класс LoginView. Я просто не могу войти. Всегда написано, что мой пароль неверный, но это не так (я проверил его с помощью check_password()). Я уже установил AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend'] в своем файле settings.py.

Вот моя clean функция в моем пользовательском AuthenticationForm:

def clean(self):
    cleaned_data = self.cleaned_data
    username = cleaned_data.get("username")
    password = cleaned_data.get("password")

    user = authenticate(username=username, password=password)

    print(user)
    print(username)
    print(password)

    try:
        us = User.objects.get(username=username)
        print(us)
        print(us.check_password(password)) # This returns True!!!
    except ObjectDoesNotExist:
        pass

    if user is not None:
        if not user.is_active:
            raise forms.ValidationError("Dieser Account ist deaktiviert. Du kannst ihn über deine E-Mail aktivieren.")
    else:
        raise forms.ValidationError("Falsches Passwort")
    return cleaned_data

1 Ответ

1 голос
/ 07 июня 2019

Метод проверки подлинности ModelBackend делает это:

 def authenticate(self, request, username=None, password=None, **kwargs):
    if username is None:
        username = kwargs.get(UserModel.USERNAME_FIELD)
    try:
        user = UserModel._default_manager.get_by_natural_key(username)
    except UserModel.DoesNotExist:
        # Run the default password hasher once to reduce the timing
        # difference between an existing and a nonexistent user (#20760).
        UserModel().set_password(password)
    else:
        if user.check_password(password) and self.user_can_authenticate(user):
            return user

и user_can_authenticate - это:

  def user_can_authenticate(self, user):
        """
        Reject users with is_active=False. Custom user models that don't have
        that attribute are allowed.
        """
        is_active = getattr(user, 'is_active', None)
        return is_active or is_active is None

У вашего пользователя для is_active установлено значение True?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...