def auth_login(self, **credentials): """ Sets the Client to appear as if it has successfully logged into a site. Returns True if login is possible; False if the provided credentials are incorrect, or the user is inactive, or if the sessions framework is not available. """ from django.http import HttpRequest from django.conf import settings from django.utils.importlib import import_module from django.contrib.sessions.middleware import SessionMiddleware from newauth.middleware import AuthMiddleware from newauth.api import authenticate, login user = authenticate(**credentials) if user and "django.contrib.sessions" in settings.INSTALLED_APPS: engine = import_module(settings.SESSION_ENGINE) # Create a fake request to store login details. request = HttpRequest() SessionMiddleware().process_request(request) AuthMiddleware().process_request(request) if self.client.session: request.session = self.client.session else: 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.client.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.client.cookies[session_cookie].update(cookie_data) return True return False
def test_logout_when_logged_in(self): """ Test to make sure that logout() works when the user is logged in. """ from newauth.tests.testapp.models import TestUser3, TestAnonymousUser3 request = HttpRequest() user = authenticate(user_id=1, _backend_name='testapp3') self.assertTrue(user.is_authenticated(), "%s is not authenticated" % user) SessionMiddleware().process_request(request) AuthMiddleware().process_request(request) self.assertTrue(hasattr(request, 'auth_user'), 'Request has no auth_user attribute') self.assertTrue(request.auth_user.is_anonymous(), 'User "%s" is authenticated' % request.auth_user) login(request, user, backend_name='testapp3') session_key = getattr(settings, 'NEWAUTH_SESSION_KEY', DEFAULT_SESSION_KEY) session_data = request.session.get(session_key) or {} self.assertEquals(session_data.get('uid'), 1) self.assertEquals(session_data.get('bn'), 'testapp3') self.assertTrue(request.auth_user.is_authenticated(), "%s is not authenticated" % request.auth_user) self.assertTrue(isinstance(request.auth_user, TestUser3), 'User "%s" is wrong User class "%s"' % ( request.auth_user, request.auth_user.__class__, )) self.assertTrue(hasattr(request.auth_user, '_backend'), 'User "%s" has no _backend attribute') self.assertTrue(hasattr(request.auth_user, '_backend_name'), 'User "%s" has no _backend_name attribute') logout(request) session_data = request.session.get(session_key) or {} self.assertEquals(session_data.get('uid'), None) self.assertEquals(session_data.get('bn'), None) self.assertTrue(hasattr(request, 'auth_user'), 'Request has no auth_user attribute') self.assertTrue(request.auth_user.is_anonymous(), 'User "%s" is authenticated' % request.auth_user) self.assertTrue(isinstance(request.auth_user, TestAnonymousUser3), 'User "%s" is wrong AnonymousUser class "%s"' % ( request.auth_user, request.auth_user.__class__, ))