为什么用户在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

我的理解是,在执行登录force_authenticate之前,它不应该是True我做错了什么,还是我的理解不正确?

.is_authenticated不意味着用户在服务器端进行身份验证。所有User对象都有is_authenticated = True,它用于区分User[Django-doc]对象和AnonymousUserDjango-dok]对象。

事实上,默认情况下,如果您查找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。但是,您可以使用自定义实现来定义自定义用户模型。

相关内容

  • 没有找到相关文章

最新更新