繁体   English   中英

为什么用户在 django 测试用例中自动认证?

[英]Why user autometically authenticated in django test case?

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)为真。 我试图简单地使用User.objects.create创建一个用户,它也返回与 is_authenticated 相同的True

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

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

实际上,默认情况下,如果您查找request.user ,如果设置没有附加用户,它将返回AnonymousUser object ,或者如果 Z21D6F40CFB511982E4424E0E250A95 绑定到该用户,则返回User object 。

对于内置User model, .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

但是,您可以定义您自己的自定义用户 model,并定义更复杂的测试:例如,只有具有is_active的用户才能进行身份验证,或者只有在过去两个月活跃的用户才能进行身份验证。

如果您在视图中写入if user.is_authenticated ,那么对于内置用户 model 将区分AnonymousUser (将返回False )和User 但是您可以使用自定义实现定义自定义用户 model。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM