Почему пользователь автоматически аутентифицируется в тестовом примере 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
. Но вы можете определить пользовательскую модель с пользовательской реализацией.