summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorJon Dufresne <jon.dufresne@gmail.com>2015-06-15 21:35:19 -0700
committerTim Graham <timograham@gmail.com>2015-07-01 13:01:08 -0400
commitb44dee16e60ff2600fee90576e5bf0083c266104 (patch)
tree591b026b6cc77f6a16373093f7d4bbc3caa8032a /django
parent39ec59d6d0f136778d483a96f15b6806a2d50407 (diff)
Fixed #20916 -- Added Client.force_login() to bypass authentication.
Diffstat (limited to 'django')
-rw-r--r--django/test/client.py59
1 files changed, 34 insertions, 25 deletions
diff --git a/django/test/client.py b/django/test/client.py
index f8c2705f98..945fa13281 100644
--- a/django/test/client.py
+++ b/django/test/client.py
@@ -592,39 +592,48 @@ class Client(RequestFactory):
are incorrect, or the user is inactive, or if the sessions framework is
not available.
"""
- from django.contrib.auth import authenticate, login
+ from django.contrib.auth import authenticate
user = authenticate(**credentials)
if (user and user.is_active and
apps.is_installed('django.contrib.sessions')):
- engine = import_module(settings.SESSION_ENGINE)
-
- # Create a fake request to store login details.
- request = HttpRequest()
+ self._login(user)
+ return True
+ else:
+ return False
- if self.session:
- request.session = self.session
- else:
- request.session = engine.SessionStore()
- login(request, user)
+ def force_login(self, user, backend=None):
+ if backend is None:
+ backend = settings.AUTHENTICATION_BACKENDS[0]
+ user.backend = backend
+ self._login(user)
- # Save the session values.
- request.session.save()
+ def _login(self, user):
+ from django.contrib.auth import login
+ engine = import_module(settings.SESSION_ENGINE)
- # Set the cookie to represent the session.
- session_cookie = settings.SESSION_COOKIE_NAME
- self.cookies[session_cookie] = request.session.session_key
- cookie_data = {
- 'max-age': None,
- 'path': '/',
- 'domain': settings.SESSION_COOKIE_DOMAIN,
- 'secure': settings.SESSION_COOKIE_SECURE or None,
- 'expires': None,
- }
- self.cookies[session_cookie].update(cookie_data)
+ # Create a fake request to store login details.
+ request = HttpRequest()
- return True
+ if self.session:
+ request.session = self.session
else:
- return False
+ request.session = engine.SessionStore()
+ login(request, user)
+
+ # Save the session values.
+ request.session.save()
+
+ # Set the cookie to represent the session.
+ session_cookie = settings.SESSION_COOKIE_NAME
+ self.cookies[session_cookie] = request.session.session_key
+ cookie_data = {
+ 'max-age': None,
+ 'path': '/',
+ 'domain': settings.SESSION_COOKIE_DOMAIN,
+ 'secure': settings.SESSION_COOKIE_SECURE or None,
+ 'expires': None,
+ }
+ self.cookies[session_cookie].update(cookie_data)
def logout(self):
"""