Токен csrf администратора Django не установлен

У меня есть проект Django, работающий локально, с работающим входом на портал администратора. После развертывания проекта в нашей среде разработки страницы, не требующие CSRF-аутентификации, доступны для просмотра, но портал администратора возвращает ошибку CSRF-токена при попытке входа.
Получена ошибка: CSRF cookie not set
Проект должен быть развернут на поддомене (т.е. https://project.myapp.com), а версия разработки/программы развернута на другом поддомене (https://project.dev.myapp.com).

Подмножество settings.py:

ALLOWED_HOSTS = ['*']
CSRF_COOKIE_SECURE = False


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.gis',
    'django.contrib.messages',
    'django.contrib.sessions',
    'django.contrib.staticfiles',
    'django_object_actions',
]

MIDDLEWARE = (
    'django.middleware.security.SecurityMiddleware',
    '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',
)

Первоначально я предположил, что проблема связана с тем, что проект развернут на поддомене, и, следуя документации по csrf, добавил CSRF_TRUSTED_ORIGINS = ['https://*.myapp.com'] в настройки, но проблема сохраняется.

Я также попробовал установить настройку CSRF_COOKIE_DOMAIN на .myapp.com или .dev.myapp.com, но продолжаю наблюдать ту же проблему.

Я также видел, что люди упоминали django.template.context_processors.csrf возможность добавить в TEMPLATES контекст_процессоров, и попробовал это, но это также не дало никакого эффекта.

При просмотре запроса к представлению /admin/login включается csrfmiddlewaretoken, но в браузере ничего не устанавливается.

Может быть, я упускаю какую-то другую настройку?

P.S. Установка выполняется с uwsgi за nginx, но поскольку все страницы по-прежнему обслуживаются правильно, я (возможно, ошибочно) предполагаю, что проблема не в этом.

Возможно, вы могли бы сделать так, чтобы флаги SESSION_COOKIE_SECURE и CSRF_COOKIE_SECURE совпадали. Вы установили флаг CSRF_COOKIE_SECURE = False. Если SESSION_COOKIE_SECURE равен True, то это может быть причиной проблемы. Вам следует либо установить оба флага в значение False во время разработки, либо установить их оба в значение True для производственной среды HTTPS.

SESSION_COOKIE_SECURE = False
CSRF_COOKIE_SECURE = False

Для CSRF Cookie Domain, когда вы переходите на новый поддомен, точка . в начале имеет решающее значение. Это гарантирует, что все субдомены будут включены.

CSRF_COOKIE_DOMAIN = '.myapp.com'

И, возможно, будет полезно убедиться, что ваша конфигурация NGINX по какой-то причине не удаляет заголовок "Cookie". Механизм CSRF Token в Django работает путем сравнения значения, хранящегося в куках вашей сессии, со значением, отправленным в скрытое поле формы или HTTP-заголовок. Если ваша конфигурация NGINX неправильно пересылает заголовок Cookie, это может быть причиной проблемы.

На самом деле проблема заключалась в самом развертывании. Сервер находится за дистрибутивом AWS cloudfront, который не передавал заголовок cookie на сервер. Комментарий @malvin о регистрации cookie в логах NGINX привел к открытию.

Вернуться на верх