Fixed #27027 -- Restored Client.force_login() defaulting to the first auth backend.
This commit is contained in:
parent
4f113483d7
commit
fc8f097117
|
@ -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):
|
||||||
|
|
|
@ -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`).
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue