2014-12-05 4 views
1

Мой сайт использует django-registration для входа/регистрации. Недавно я представил некоторое промежуточное программное обеспечение для кеша, и это привело к нарушениям CSRF при попытке выполнить повторную регистрацию новых пользователей.Кэширование Django вызывает нарушения CSRF

Вот промежуточное заявление от моего settings.py:

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware', 
'django.middleware.cache.UpdateCacheMiddleware',   <------ 
'django.middleware.locale.LocaleMiddleware', 
'linaro_django_pagination.middleware.PaginationMiddleware', 
'django.middleware.cache.FetchFromCacheMiddleware',  <------ 
'djangobb_forum.middleware.LastLoginMiddleware', 
'djangobb_forum.middleware.UsersOnline', 
'djangobb_forum.middleware.TimezoneMiddleware', 

)

Не уверен, если это реальная проблема или нет. Имеет ли смысл утверждение промежуточного программного обеспечения?

Кажется, что должно существовать способ совместного использования CSRF и Cache. В настоящее время я удалил промежуточное программное обеспечение кэша.

ответ

1

По https://docs.djangoproject.com/en/1.8/topics/cache/#the-per-site-cache:

После того, как кэш настроен, самый простой способ использовать кэширование для кэширования всего сайта. Вам нужно добавить «django.middleware.cache.UpdateCacheMiddleware» и «django.middleware.cache.FetchFromCacheMiddleware» для вашей установки MIDDLEWARE_CLASSES, как в этом примере:

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.cache.FetchFromCacheMiddleware', 
) 

Примечание

Нет, не опечатка: «промежуточное ПО обновления» должно быть первым в списке, а промежуточное ПО «выборки» должно быть последним. Детали немного неясны, но см. Заказ MIDDLEWARE_CLASSES ниже, если вам нужна полная история.

Не уверен, что это помогает.