django 测试 response.request.user.is_authenticated() 在注销后返回 True
django tests response.request.user.is_authenticated() returning True after logout
我正在尝试为我的应用程序的身份验证部分编写一些测试,但在检查用户是否登录时遇到了问题。这是代码:
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 之后,他应该被定向到该站点并进行身份验证。我的问题是,查明用户是否通过身份验证的好方法是什么?在这种情况下注销用户的首选方法是什么?我想检查是否用户已注销并单击 link 验证 link 第二次它不起作用。我尝试了一些类似的东西:
client.logout()
但不幸的是,即使我删除了这一行,它似乎每两次都有效。
感谢您的帮助!
好的,问题是身份验证系统使用时间戳函数来了解 url 是否过期。当 运行 在测试中验证 url 没有过期。注销后的登录请求速度太快,系统认为验证url仍然有效,用户通过了身份验证。这就是 user.is_authenticated() 一直返回 True 的原因。
我正在尝试为我的应用程序的身份验证部分编写一些测试,但在检查用户是否登录时遇到了问题。这是代码:
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 之后,他应该被定向到该站点并进行身份验证。我的问题是,查明用户是否通过身份验证的好方法是什么?在这种情况下注销用户的首选方法是什么?我想检查是否用户已注销并单击 link 验证 link 第二次它不起作用。我尝试了一些类似的东西:
client.logout()
但不幸的是,即使我删除了这一行,它似乎每两次都有效。
感谢您的帮助!
好的,问题是身份验证系统使用时间戳函数来了解 url 是否过期。当 运行 在测试中验证 url 没有过期。注销后的登录请求速度太快,系统认为验证url仍然有效,用户通过了身份验证。这就是 user.is_authenticated() 一直返回 True 的原因。