Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions django/contrib/auth/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,8 +234,12 @@ async def alogin(request, user, backend=None):
await request.session.aset(SESSION_KEY, user._meta.pk.value_to_string(user))
await request.session.aset(BACKEND_SESSION_KEY, backend)
await request.session.aset(HASH_SESSION_KEY, session_auth_hash)
if hasattr(request, "user"):
request.user = user
if hasattr(request, "auser"):

async def auser():
return user

request.auser = auser
rotate_token(request)
await user_logged_in.asend(sender=user.__class__, request=request, user=user)

Expand Down Expand Up @@ -269,10 +273,13 @@ async def alogout(request):
user = None
await user_logged_out.asend(sender=user.__class__, request=request, user=user)
await request.session.aflush()
if hasattr(request, "user"):
if hasattr(request, "auser"):
from django.contrib.auth.models import AnonymousUser

request.user = AnonymousUser()
async def auser():
return AnonymousUser()

request.auser = auser


def get_user_model():
Expand Down
21 changes: 20 additions & 1 deletion tests/auth_tests/test_middleware.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from django.conf import settings
from django.contrib.auth import REDIRECT_FIELD_NAME
from django.contrib.auth import REDIRECT_FIELD_NAME, alogin, alogout
from django.contrib.auth.middleware import (
AuthenticationMiddleware,
LoginRequiredMiddleware,
Expand All @@ -17,6 +17,9 @@ def setUpTestData(cls):
cls.user = User.objects.create_user(
"test_user", "test@example.com", "test_password"
)
cls.user2 = User.objects.create_user(
"test_user2", "test2@example.com", "test_password2"
)

def setUp(self):
self.middleware = AuthenticationMiddleware(lambda req: HttpResponse())
Expand Down Expand Up @@ -57,6 +60,22 @@ async def test_auser(self):
auser_second = await self.request.auser()
self.assertIs(auser, auser_second)

async def test_auser_after_alogin(self):
self.middleware(self.request)
auser = await self.request.auser()
self.assertEqual(auser, self.user)
await alogin(self.request, self.user2)
auser_second = await self.request.auser()
self.assertEqual(auser_second, self.user2)

async def test_auser_after_alogout(self):
self.middleware(self.request)
auser = await self.request.auser()
self.assertEqual(auser, self.user)
await alogout(self.request)
auser_second = await self.request.auser()
self.assertTrue(auser_second.is_anonymous)


@override_settings(ROOT_URLCONF="auth_tests.urls")
@modify_settings(
Expand Down
Loading