1
1
from datetime import datetime
3
3
from django.conf import settings
4
from django.contrib.auth import authenticate
4
5
from django.contrib.auth.backends import RemoteUserBackend
5
from django.contrib.auth.models import User
6
from django.contrib.auth.models import User, AnonymousUser
7
from django.contrib.auth.tests.utils import skipIfCustomUser
6
8
from django.test import TestCase
7
9
from django.utils import timezone
10
13
class RemoteUserTest(TestCase):
12
15
urls = 'django.contrib.auth.tests.urls'
21
24
self.curr_middleware = settings.MIDDLEWARE_CLASSES
22
25
self.curr_auth = settings.AUTHENTICATION_BACKENDS
23
26
settings.MIDDLEWARE_CLASSES += (self.middleware,)
24
settings.AUTHENTICATION_BACKENDS = (self.backend,)
27
settings.AUTHENTICATION_BACKENDS += (self.backend,)
26
29
def test_no_remote_user(self):
95
98
response = self.client.get('/remote_user/', REMOTE_USER=self.known_user)
96
99
self.assertEqual(default_login, response.context['user'].last_login)
101
def test_header_disappears(self):
103
Tests that a logged in user is logged out automatically when
104
the REMOTE_USER header disappears during the same browser session.
106
User.objects.create(username='knownuser')
107
# Known user authenticates
108
response = self.client.get('/remote_user/', REMOTE_USER=self.known_user)
109
self.assertEqual(response.context['user'].username, 'knownuser')
110
# During the session, the REMOTE_USER header disappears. Should trigger logout.
111
response = self.client.get('/remote_user/')
112
self.assertEqual(response.context['user'].is_anonymous(), True)
113
# verify the remoteuser middleware will not remove a user
114
# authenticated via another backend
115
User.objects.create_user(username='modeluser', password='foo')
116
self.client.login(username='modeluser', password='foo')
117
authenticate(username='modeluser', password='foo')
118
response = self.client.get('/remote_user/')
119
self.assertEqual(response.context['user'].username, 'modeluser')
98
121
def tearDown(self):
99
122
"""Restores settings to avoid breaking other tests."""
100
123
settings.MIDDLEWARE_CLASSES = self.curr_middleware