Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django测试response.request.user.u authenticated()是否在注销后返回True_Django_Django Unittest - Fatal编程技术网

django测试response.request.user.u authenticated()是否在注销后返回True

django测试response.request.user.u authenticated()是否在注销后返回True,django,django-unittest,Django,Django Unittest,我试图为应用程序的身份验证部分编写一些测试,但在检查用户是否登录时遇到了问题。代码如下: client = Client() # user signup form response = client.post(signup_url, data={ 'email': "lorem@ipsum.pl", 'password1': 'hunter2', 'password2': 'hunter2', }, follow=

我试图为应用程序的身份验证部分编写一些测试,但在检查用户是否登录时遇到了问题。代码如下:

    client = Client()

    # user signup form
    response = client.post(signup_url, data={
        'email': "lorem@ipsum.pl",
        'password1': 'hunter2',
        'password2': 'hunter2',
    }, follow=True)

    # checking if the user is logged in
    with self.assertRaises(KeyError):
        client.session['_auth_user_id']

    self.assertEquals(len(mail.outbox), 1)
    url = find_verification_url(mail.outbox[0].body)
    response = client.get(url, follow=True)
    self.assertEqual(200, response.status_code)

    user = User.objects.get(email="lorem@ipsum.pl")

    self.assertEqual(client.session['_auth_user_id'], user.pk)

    # how to logout a user?
    force_logout()

    self.assertFalse(response.request.user.is_authenticated())
用户填写表单并单击提交,然后收到带有验证url的电子邮件。在他点击电子邮件中的验证url后,他应该被引导到该站点并进行身份验证。我的问题是,什么是确定用户是否经过身份验证的好方法?在这种情况下,注销用户的首选方式是什么?我想检查一下,如果用户已注销并再次单击该链接,则验证链接不起作用。我试过一些东西,比如:

client.logout()
但不幸的是,它似乎每两次工作一次,即使我删除这条线


谢谢你的帮助

好的,问题是身份验证系统使用时间戳函数来知道url是否过期。在测试中运行时,验证url在应该过期时未过期。注销后的登录请求太快,系统认为验证url仍然有效,用户已通过身份验证。这就是为什么user.is_authenticated()总是返回True。

您是否尝试过client.get(“/logout”)(或您的注销URL等效项)?您是否介意解释一下您是如何通过测试的?