No estoy seguro si la respuesta @ CraigKerstiens tiene en cuenta que request.is_secure()
siempre devuelve False
si detrás de proxy inverso de Heroku y no "fija". Si recuerdo correctamente, esto causará un bucle de redirección HTTP.
Si está ejecutando Django con gunicorn, otra manera de hacerlo es añadir lo siguiente al de gunicorn config
secure_scheme_headers = {
'X-FORWARDED-PROTO': 'https'
}
Ejecutar con un poco como esto en su Procfile
web: python manage.py run_gunicorn -b 0.0.0.0:$PORT -c config/gunicorn.conf
Mediante el establecimiento de gunicorn secure-scheme-header
, request.is_secure()
devolverá correctamente True
en las solicitudes https. Ver Gunicorn Config.
Ahora el middleware de @ CraigKerstiens funcionará correctamente, incluidas las llamadas al request.is_secure()
en su aplicación.
Nota: Django también tiene la misma configuración de configuración llamada SECURE_PROXY_SSL_HEADER
, pero está en la versión dev.
La respuesta es ahora una [aplicación en github] (https://github.com/rdegges/django-sslify) –
Votación para poner github ... ¡Gracias! Justo lo que estaba buscando hoy. –
Como nota al margen, esto no funciona si tiene DEBUG configurado en True. Pasé una hora pensando en eso, así que espero que esto le ahorre a alguien algo de tiempo. – Femi