﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
2541	[patch] CacheMiddleware depends on AuthenticationMiddleware is CACHE_ANONYMOUS_ONLY=True	dummy@…	Jacob	"Hi,

if you set CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True the default order in MIDDLEWARE_CLASSES won't work

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.doc.XViewMiddleware',
)

From the tutorial it should be

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.CacheMiddleware', # before CommonMiddleware
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.doc.XViewMiddleware',
)

but with this order and CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True you get the following error:

Traceback (most recent call last):

  File ""/usr/local/lib/python2.4/site-packages/django/core/servers/basehttp.py"", line 272, in run
    self.result = application(self.environ, self.start_response)

  File ""/usr/local/lib/python2.4/site-packages/django/core/servers/basehttp.py"", line 611, in __call__
    return self.application(environ, start_response)

  File ""/usr/local/lib/python2.4/site-packages/django/core/handlers/wsgi.py"", line 148, in __call__
    response = self.get_response(request.path, request)

  File ""/usr/local/lib/python2.4/site-packages/django/core/handlers/base.py"", line 59, in get_response
    response = middleware_method(request)

  File ""/usr/local/lib/python2.4/site-packages/django/middleware/cache.py"", line 51, in process_request
    if self.cache_anonymous_only and request.user.is_authenticated():

AttributeError: 'WSGIRequest' object has no attribute 'user'

The correct order I asume is:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', ## before AuthenticationMiddleware
    'django.contrib.auth.middleware.AuthenticationMiddleware', ## before CacheMiddleware
    'django.middleware.cache.CacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.doc.XViewMiddleware',
)

To give the user a better error message for this dependancy I attach a fix.

Regards,
Dirk"	defect	closed	Core (Cache system)	magic-removal	normal	fixed			Unreviewed	1	0	0	0	0	0
