Ticket #2550: ticket2550b.diff
File ticket2550b.diff, 4.4 KB (added by , 13 years ago) |
---|
-
docs/topics/auth.txt
1449 1449 you need to force users to re-authenticate using different methods. A simple 1450 1450 way to do that is simply to execute ``Session.objects.all().delete()``. 1451 1451 1452 .. versionadded:: 1.4 1453 1454 If a backend raises a :class:`~django.core.exceptions.PermissionDenied` 1455 exception, authentication will immediately fail. Django won't check the backends that follow. 1456 1457 1452 1458 Writing an authentication backend 1453 1459 --------------------------------- 1454 1460 -
django/contrib/auth/__init__.py
1 1 import datetime 2 2 from warnings import warn 3 from django.core.exceptions import ImproperlyConfigured 3 from django.core.exceptions import ImproperlyConfigured, PermissionDenied 4 4 from django.utils.importlib import import_module 5 5 from django.contrib.auth.signals import user_logged_in, user_logged_out 6 6 … … 47 47 except TypeError: 48 48 # This backend doesn't accept these credentials as arguments. Try the next one. 49 49 continue 50 except PermissionDenied: 51 # This backend says to stop in our tracks - this user should not be allowed in at all. 52 return None 50 53 if user is None: 51 54 continue 52 55 # Annotate the user object with the path of the backend. -
django/contrib/auth/tests/auth_backends.py
3 3 from django.conf import settings 4 4 from django.contrib.auth.models import User, Group, Permission, AnonymousUser 5 5 from django.contrib.contenttypes.models import ContentType 6 from django.core.exceptions import ImproperlyConfigured 6 from django.core.exceptions import ImproperlyConfigured, PermissionDenied 7 from django.contrib.auth import authenticate 7 8 from django.test import TestCase 8 9 9 10 … … 350 351 self.assertEqual(self.user1.has_module_perms("app1"), False) 351 352 self.assertEqual(self.user1.has_module_perms("app2"), False) 352 353 354 class PermissionDeniedBackend(object): 355 """ 356 always raises PermissionDenied 357 """ 358 supports_object_permissions = True 359 supports_anonymous_user = True 360 supports_inactive_user = True 361 362 def authenticate(self, username=None, password=None): 363 raise PermissionDenied 364 365 366 class PermissionDeniedBackendTest(TestCase): 367 """ 368 Tests that other backends are not checked once a backend raises PermissionDenied 369 """ 370 backend = 'django.contrib.auth.tests.auth_backends.PermissionDeniedBackend' 371 372 def setUp(self): 373 self.curr_auth = settings.AUTHENTICATION_BACKENDS 374 self.user1 = User.objects.create_user('test', 'test@example.com', 'test') 375 self.user1.save() 376 377 def tearDown(self): 378 settings.AUTHENTICATION_BACKENDS = self.curr_auth 379 380 def test_permission_denied(self): 381 "user is not authenticated after a backend raises permission denied #2550" 382 settings.AUTHENTICATION_BACKENDS = (self.backend,) + tuple(self.curr_auth) 383 self.assertEqual(authenticate(username='test', password='test'), None) 384 385 def test_authenticates(self): 386 settings.AUTHENTICATION_BACKENDS = tuple(self.curr_auth) + (self.backend,) 387 self.assertEqual(authenticate(username='test', password='test'), self.user1) -
django/contrib/auth/tests/__init__.py
1 1 from django.contrib.auth.tests.auth_backends import (BackendTest, 2 2 RowlevelBackendTest, AnonymousUserBackendTest, NoAnonymousUserBackendTest, 3 NoBackendsTest, InActiveUserBackendTest, NoInActiveUserBackendTest) 3 NoBackendsTest, InActiveUserBackendTest, NoInActiveUserBackendTest, 4 PermissionDeniedBackendTest) 4 5 from django.contrib.auth.tests.basic import BasicTestCase 5 6 from django.contrib.auth.tests.context_processors import AuthContextProcessorTests 6 7 from django.contrib.auth.tests.decorators import LoginRequiredTestCase