Fixed #27027 -- Restored Client.force_login() defaulting to the first auth backend.

This commit is contained in:
Ben Demboski 2016-08-05 17:18:12 -07:00 committed by Tim Graham
parent 4f113483d7
commit fc8f097117
3 changed files with 25 additions and 0 deletions

View File

@ -626,6 +626,9 @@ class Client(RequestFactory):
return False return False
def force_login(self, user, backend=None): def force_login(self, user, backend=None):
if backend is None:
backend = settings.AUTHENTICATION_BACKENDS[0]
user.backend = backend
self._login(user, backend) self._login(user, backend)
def _login(self, user, backend=None): def _login(self, user, backend=None):

View File

@ -33,3 +33,7 @@ Bugfixes
* Prevented the ``migrate`` command from raising * Prevented the ``migrate`` command from raising
``InconsistentMigrationHistory`` in the presence of unapplied squashed ``InconsistentMigrationHistory`` in the presence of unapplied squashed
migrations (:ticket:`27004`). migrations (:ticket:`27004`).
* Fixed a regression in ``Client.force_login()`` which required specifying a
``backend`` rather than automatically using the first one if multiple
backends are configured (:ticket:`27027`).

View File

@ -532,12 +532,30 @@ class ClientTest(TestCase):
# Log in # Log in
self.client.force_login(self.u1, backend='test_client.auth_backends.TestClientBackend') 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 # Request a page that requires a login
response = self.client.get('/login_protected_view/') response = self.client.get('/login_protected_view/')
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['user'].username, 'testclient') self.assertEqual(response.context['user'].username, 'testclient')
@override_settings(
AUTHENTICATION_BACKENDS=[
'django.contrib.auth.backends.ModelBackend',
'test_client.auth_backends.TestClientBackend',
],
)
def test_force_login_without_backend(self):
"""
force_login() without passing a backend and with multiple backends
configured should automatically use the first backend.
"""
self.client.force_login(self.u1)
response = self.client.get('/login_protected_view/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['user'].username, 'testclient')
self.assertEqual(self.u1.backend, 'django.contrib.auth.backends.ModelBackend')
@override_settings(SESSION_ENGINE="django.contrib.sessions.backends.signed_cookies") @override_settings(SESSION_ENGINE="django.contrib.sessions.backends.signed_cookies")
def test_logout_cookie_sessions(self): def test_logout_cookie_sessions(self):
self.test_logout() self.test_logout()