Kaydet (Commit) 03eeb020 authored tarafından Jannis Leidel's avatar Jannis Leidel

Fixed #159 -- Prevent the `AdminSite` from logging users out when they try to…

Fixed #159 -- Prevent the `AdminSite` from logging users out when they try to log in form the logout page. Many thanks, ashchristopher.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17465 bcc190cf-cafb-0310-a4f2-bffc1f526a37
üst bd586125
from functools import update_wrapper from functools import update_wrapper
from django import http from django.http import Http404, HttpResponseRedirect
from django.contrib.admin import ModelAdmin, actions from django.contrib.admin import ModelAdmin, actions
from django.contrib.admin.forms import AdminAuthenticationForm from django.contrib.admin.forms import AdminAuthenticationForm
from django.contrib.auth import REDIRECT_FIELD_NAME from django.contrib.auth import REDIRECT_FIELD_NAME
...@@ -188,6 +188,10 @@ class AdminSite(object): ...@@ -188,6 +188,10 @@ class AdminSite(object):
""" """
def inner(request, *args, **kwargs): def inner(request, *args, **kwargs):
if not self.has_permission(request): if not self.has_permission(request):
if request.path == reverse('admin:logout',
current_app=self.name):
index_path = reverse('admin:index', current_app=self.name)
return HttpResponseRedirect(index_path)
return self.login(request) return self.login(request)
return view(request, *args, **kwargs) return view(request, *args, **kwargs)
if not cacheable: if not cacheable:
...@@ -421,7 +425,7 @@ class AdminSite(object): ...@@ -421,7 +425,7 @@ class AdminSite(object):
'models': [model_dict], 'models': [model_dict],
} }
if not app_dict: if not app_dict:
raise http.Http404('The requested admin page does not exist.') raise Http404('The requested admin page does not exist.')
# Sort the models alphabetically within each app. # Sort the models alphabetically within each app.
app_dict['models'].sort(key=lambda x: x['name']) app_dict['models'].sort(key=lambda x: x['name'])
context = { context = {
......
...@@ -3385,3 +3385,31 @@ class AdminCustomSaveRelatedTests(TestCase): ...@@ -3385,3 +3385,31 @@ class AdminCustomSaveRelatedTests(TestCase):
self.assertEqual('Josh Stone', Parent.objects.latest('id').name) self.assertEqual('Josh Stone', Parent.objects.latest('id').name)
self.assertEqual([u'Catherine Stone', u'Paul Stone'], children_names) self.assertEqual([u'Catherine Stone', u'Paul Stone'], children_names)
class AdminViewLogoutTest(TestCase):
urls = "regressiontests.admin_views.urls"
fixtures = ['admin-views-users.xml']
def setUp(self):
self.client.login(username='super', password='secret')
def tearDown(self):
self.client.logout()
def test_client_logout_url_can_be_used_to_login(self):
response = self.client.get('/test_admin/admin/logout/')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.template_name, 'registration/logged_out.html')
self.assertEqual(response.request['PATH_INFO'], '/test_admin/admin/logout/')
# we are now logged out
response = self.client.get('/test_admin/admin/logout/')
self.assertEqual(response.status_code, 302) # we should be redirected to the login page.
# follow the redirect and test results.
response = self.client.get('/test_admin/admin/logout/', follow=True)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.template_name, 'admin/login.html')
self.assertEqual(response.request['PATH_INFO'], '/test_admin/admin/')
self.assertContains(response, '<input type="hidden" name="next" value="/test_admin/admin/" />')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment