gpt4 book ai didi

python - 为什么 user.is_authenticated 在注销后断言为真

转载 作者:行者123 更新时间:2023-12-04 08:44:10 24 4
gpt4 key购买 nike

我正在尝试编写一个用于在 Django 中注销用户的测试。这是代码:urls.py

from django.conf.urls import url
from django.contrib import admin
from accounts.views import LoginView, LogoutView


urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', LoginView.as_view(), name='login'),
url(r'^logout/', LogoutView.as_view(), name='logout'),
]
views.py
from django.http import HttpResponseRedirect
from django.contrib.auth import login, logout
from django.views.generic import View


class LogoutView(View):
def get(self, request):
logout(request)
return HttpResponseRedirect('/')
tests.py
from django.test import TestCase, Client
from django.contrib.auth.models import User


class LogoutTest(TestCase):
def setUp(self):
self.client = Client()
self.user = User.objects.create_user(
username='user1',
email='user1_123@gmail.com',
password='top_secret123'
)

def test_user_logs_out(self):
self.client.login(email=self.user.email, password=self.user.password)
self.assertTrue(self.user.is_authenticated)

response = self.client.get('/logout/')

self.assertFalse(self.user.is_authenticated)
self.assertRedirects(response, '/', 302)
断言 self.assertFalse(self.user.is_authenticated)失败了。通过浏览器进行测试似乎工作正常。似乎用户在调用 logout() 后不会通过身份验证.我错过了什么吗?

最佳答案

It seems like the user would not be authenticated after calling logout(). Am I missing something?


.is_authenticated [Django-doc]不检查用户是否登录。每个真正的 User总是返回 True对于 is_authenticated .一个 AnonymousUser [Django-doc]将返回 False例如。如果您因此退出,那么 request.user将是 AnonymousUser ,因此无法通过身份验证。
换句话说,如果你使用 request.user.is_authenticated ,如果 session 绑定(bind)到用户(您使用浏览器登录),您将在登录用户上调用它,并且您在 AnonymousUser 上调用它如果浏览器未登录用户/浏览器已注销。

关于python - 为什么 user.is_authenticated 在注销后断言为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64414009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com