diff options
| author | Jon Dufresne <jon.dufresne@gmail.com> | 2015-06-15 21:35:19 -0700 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2015-07-01 13:01:08 -0400 |
| commit | b44dee16e60ff2600fee90576e5bf0083c266104 (patch) | |
| tree | 591b026b6cc77f6a16373093f7d4bbc3caa8032a /django | |
| parent | 39ec59d6d0f136778d483a96f15b6806a2d50407 (diff) | |
Fixed #20916 -- Added Client.force_login() to bypass authentication.
Diffstat (limited to 'django')
| -rw-r--r-- | django/test/client.py | 59 |
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): """ |
