mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #20916 -- Added Client.force_login() to bypass authentication.
This commit is contained in:
@@ -364,6 +364,20 @@ class ClientTest(TestCase):
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['user'].username, 'testclient')
|
||||
|
||||
def test_view_with_force_login(self):
|
||||
"Request a page that is protected with @login_required"
|
||||
# Get the page without logging in. Should result in 302.
|
||||
response = self.client.get('/login_protected_view/')
|
||||
self.assertRedirects(response, '/accounts/login/?next=/login_protected_view/')
|
||||
|
||||
# Log in
|
||||
self.client.force_login(self.u1)
|
||||
|
||||
# Request a page that requires a login
|
||||
response = self.client.get('/login_protected_view/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['user'].username, 'testclient')
|
||||
|
||||
def test_view_with_method_login(self):
|
||||
"Request a page that is protected with a @login_required method"
|
||||
|
||||
@@ -380,6 +394,20 @@ class ClientTest(TestCase):
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['user'].username, 'testclient')
|
||||
|
||||
def test_view_with_method_force_login(self):
|
||||
"Request a page that is protected with a @login_required method"
|
||||
# Get the page without logging in. Should result in 302.
|
||||
response = self.client.get('/login_protected_method_view/')
|
||||
self.assertRedirects(response, '/accounts/login/?next=/login_protected_method_view/')
|
||||
|
||||
# Log in
|
||||
self.client.force_login(self.u1)
|
||||
|
||||
# Request a page that requires a login
|
||||
response = self.client.get('/login_protected_method_view/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['user'].username, 'testclient')
|
||||
|
||||
def test_view_with_login_and_custom_redirect(self):
|
||||
"Request a page that is protected with @login_required(redirect_field_name='redirect_to')"
|
||||
|
||||
@@ -396,6 +424,23 @@ class ClientTest(TestCase):
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['user'].username, 'testclient')
|
||||
|
||||
def test_view_with_force_login_and_custom_redirect(self):
|
||||
"""
|
||||
Request a page that is protected with
|
||||
@login_required(redirect_field_name='redirect_to')
|
||||
"""
|
||||
# Get the page without logging in. Should result in 302.
|
||||
response = self.client.get('/login_protected_view_custom_redirect/')
|
||||
self.assertRedirects(response, '/accounts/login/?redirect_to=/login_protected_view_custom_redirect/')
|
||||
|
||||
# Log in
|
||||
self.client.force_login(self.u1)
|
||||
|
||||
# Request a page that requires a login
|
||||
response = self.client.get('/login_protected_view_custom_redirect/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['user'].username, 'testclient')
|
||||
|
||||
def test_view_with_bad_login(self):
|
||||
"Request a page that is protected with @login, but use bad credentials"
|
||||
|
||||
@@ -408,6 +453,21 @@ class ClientTest(TestCase):
|
||||
login = self.client.login(username='inactive', password='password')
|
||||
self.assertFalse(login)
|
||||
|
||||
def test_view_with_inactive_force_login(self):
|
||||
"Request a page that is protected with @login, but use an inactive login"
|
||||
|
||||
# Get the page without logging in. Should result in 302.
|
||||
response = self.client.get('/login_protected_view/')
|
||||
self.assertRedirects(response, '/accounts/login/?next=/login_protected_view/')
|
||||
|
||||
# Log in
|
||||
self.client.force_login(self.u2)
|
||||
|
||||
# Request a page that requires a login
|
||||
response = self.client.get('/login_protected_view/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['user'].username, 'inactive')
|
||||
|
||||
def test_logout(self):
|
||||
"Request a logout after logging in"
|
||||
# Log in
|
||||
@@ -425,6 +485,47 @@ class ClientTest(TestCase):
|
||||
response = self.client.get('/login_protected_view/')
|
||||
self.assertRedirects(response, '/accounts/login/?next=/login_protected_view/')
|
||||
|
||||
def test_logout_with_force_login(self):
|
||||
"Request a logout after logging in"
|
||||
# Log in
|
||||
self.client.force_login(self.u1)
|
||||
|
||||
# Request a page that requires a login
|
||||
response = self.client.get('/login_protected_view/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['user'].username, 'testclient')
|
||||
|
||||
# Log out
|
||||
self.client.logout()
|
||||
|
||||
# Request a page that requires a login
|
||||
response = self.client.get('/login_protected_view/')
|
||||
self.assertRedirects(response, '/accounts/login/?next=/login_protected_view/')
|
||||
|
||||
@override_settings(
|
||||
AUTHENTICATION_BACKENDS=[
|
||||
'django.contrib.auth.backends.ModelBackend',
|
||||
'test_client.auth_backends.TestClientBackend',
|
||||
],
|
||||
)
|
||||
def test_force_login_with_backend(self):
|
||||
"""
|
||||
Request a page that is protected with @login_required when using
|
||||
force_login() and passing a backend.
|
||||
"""
|
||||
# Get the page without logging in. Should result in 302.
|
||||
response = self.client.get('/login_protected_view/')
|
||||
self.assertRedirects(response, '/accounts/login/?next=/login_protected_view/')
|
||||
|
||||
# Log in
|
||||
self.client.force_login(self.u1, backend='test_client.auth_backends.TestClientBackend')
|
||||
self.assertEqual(self.u1.backend, 'test_client.auth_backends.TestClientBackend')
|
||||
|
||||
# Request a page that requires a login
|
||||
response = self.client.get('/login_protected_view/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.context['user'].username, 'testclient')
|
||||
|
||||
@override_settings(SESSION_ENGINE="django.contrib.sessions.backends.signed_cookies")
|
||||
def test_logout_cookie_sessions(self):
|
||||
self.test_logout()
|
||||
|
||||
Reference in New Issue
Block a user