pytest- django: пользователи, созданные с помощью create_user, всегда проходят аутентификацию - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь написать приспособление для генерации Django пользователей из пользовательской модели пользователя. Странно то, что вновь созданный пользователь проверяет подлинность по умолчанию, хотя я ожидаю, что он будет анонимным. Что я делаю не так?

Приспособление:

import pytest

@pytest.fixture
def create_user(db, django_user_model):
    def make_user(**kwargs):
        return django_user_model.objects.create_user(**kwargs)
    return make_user

Проверка приспособления:

@pytest.mark.django_db
def test_fixture_create_user(create_user):
    user = create_user(email='foo@bar.com', password='bar')
    assert user.is_authenticated is True  # <-- this should be False but it's True
    assert user.is_anonymous is True      # <-- this fails

Проверка не проходит таким образом:

E       assert False is True
E        +  where False = <CustomUser: foo@bar.com>.is_anonymous

Пользовательская модель пользователя:

class CustomUser(AbstractUser):
    username = None
    email = models.EmailField(_('email address'), unique=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

CustomUserManager:

class CustomUserManager(BaseUserManager):
    """
    Custom user model manager where email is the unique identifiers
    for authentication instead of usernames.
    """
    def create_user(self, email, password, **extra_fields):
        """
        Create and save a User with the given email and password.
        """
        if not email:
            raise ValueError(_('The Email must be set'))
        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save()
        return user

1 Ответ

1 голос
/ 04 мая 2020

В этом нет ничего плохого, приятель. Свойство is_authenticated AbstractUser жестко закодировано как True. Промежуточное ПО Django делает все маги c и возвращает request.user как экземпляр класса AnonymousUser, свойство is_authenticated которого возвращает False

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