Почему пользователь автоматически аутентифицируется в тестовом примере django?

from django.urls import reverse
from rest_framework.test import APITestCase
from rest_framework.authtoken.models import Token

from faker import Faker
fake = Faker()
APICLIENT = APIClient()
from factory_djoy import UserFactory

class TestAccount(APITestCase):

    def setUp(self):
        self.user = UserFactory()
    def test_print_name(self):
        print(self.user.is_authenticated)
        # do something here

почему print(self.user.is_authenticated) является True. Я пытался создать пользователя, используя просто User.objects.create он также возвращает то же самое, что и is_authenticated True.

Насколько я понимаю, он не должен быть True перед выполнением login или force_authenticate. Что я делаю неправильно или мое понимание неверно?

.is_authenticated означает не, что пользователь аутентифицирован на стороне сервера. Все User объекты имеют is_authenticated = True, он используется для проведения различия между User [Django-doc] объектом, и AnonymousUser [Django-doc].

Действительно, по умолчанию, если вы ищете request.user, он вернет либо объект AnonymousUser, если к настройке не привязан пользователь, либо объект User, если сессия привязана к этому пользователю.

Для встроенной модели User, .is_autenticated , таким образом, всегда будет возвращаться True [GitHub]:

@property
def is_authenticated(self):
    """
    Always return True. This is a way to tell if the user has been
    authenticated in templates.
    """
    return True

Однако вы можете определить свою собственную пользовательскую модель и задать более сложный тест: например, только пользователи с is_active могут быть аутентифицированы, или пользователи могут быть аутентифицированы, только если они были активны, например, последние два месяца.

Если вы напишите в представлении if user.is_authenticated, то таким образом для встроенной модели пользователя будет сделано различие между AnonymousUser (которая вернет False) и User. Но вы можете определить пользовательскую модель с пользовательской реализацией.

Вернуться на верх