2014-01-15 6 views
3

Всякий раз, когда я пытаюсь войти в приложение администратора Django, после заполнения имени пользователя и пароля и отправки формы, страница зависает навсегда.Администратор Django - проверка CSRF не удалась. Request aborted

Когда я обновить запрос POST в браузере, я получаю:

CSRF verification failed. Request aborted. 

enter image description here

Когда я снова обновите страницу, все работает, я вижу администратора приложения, я вошел в систему и я может выполнять операции CRUD в моих приложениях и таблицах.

Любые идеи, почему?

У меня есть обратный прокси Nginx перед приложением Django, выполняющим https рукопожатие. Поэтому, когда вы идете (например):

https://platform.staging.com/admin/ 

Nginx обратного прокси, что

http://admin1.staging.platform.com/admin/ 

Это мой Nginx конфигурации:

upstream admin-cluster { 
    ip_hash; 
    server admin1.staging.platform.com; 
} 

# force redirect of http to https 
# application will be available only over https 
server { 
    listen 80 default; 
    server_name platform.staging.com; 
    rewrite ^https://$server_name$request_uri? permanent; 
} 

# https server 
# traffic is going to local web servers over normal http 
# front nginx proxy server will hold ssl session 
server { 
    listen 443 ssl spdy; 
    server_name platform.staging.com; 
    keepalive_timeout 70; 

    ssl     on; 
    ssl_certificate  /etc/ssl/platform.staging.com.crt; 
    ssl_certificate_key /etc/ssl/platform.staging.com.key; 

    location /admin { 
    proxy_pass http://admin-cluster; 
    } 

} 

EDIT:

Итак, я нашел обходное решение. Когда я позволяю также порт 80 на моем Nginx обратный прокси-сервер, но перенаправить все запросы HTTP к HTTPS, как это:

server { 
    listen 80 default; 
    server_name platform.staging.com; 
    rewrite ^https://$server_name$request_uri? permanent; 
} 

Это устранило проблему. Любая идея почему?

+0

См. Редактирование в конце моего вопроса для обходного пути, который я реализовал на данный момент. –

ответ

5

Проверьте свои настройки на значения, переопределяя значения SESSION_COOKIE_SECURE и CSRF_COOKIE_SECURE, так как проблема может быть связана с файлом CSRF. EDIT: У меня на самом деле эти два значения равны True.

Кроме того, проверьте настройку SECURE_PROXY_SSL_HEADER, хотя я не уверен, что она имеет отношение к вашей проблеме. Я пропускаю директиву proxy_set_header X-Forwarded-Protocol в вашем файле конфига nginx, используемом для того, чтобы позволить Django знать, что вы проходите через прокси.

Смежные вопросы