Django request.is_secure возвращает неправильное значение для перенаправленных методов - PullRequest
5 голосов
/ 03 декабря 2011

Я пытаюсь написать утилиту перенаправления ssl для приложений django (https://bitbucket.org/yilmazhuseyin/django-sslredirector). Моя проблема в том, что когда я перенаправляю страницы с http на https, я не могу понять, что я нахожусь на безопасном соединении (когда я вызываю request.is_secure, он возвращает false Я думаю, что для этого есть хак, так называемый Webfaction, который я не могу понять, как он работает. Вот метод is_secure для случая webfaction

   def _is_secure(self, request):
        if request.is_secure():
        return True

        #Handle the Webfaction case until this gets resolved in the request.is_secure()
        if 'HTTP_X_FORWARDED_SSL' in request.META:
        return request.META['HTTP_X_FORWARDED_SSL'] == 'on'

Моя проблема в том, что когда я перенаправляю свои страницы с http на https, метод request.is_secure по-прежнему возвращает false (событие, хотя я нахожусь на https), и я постоянно перенаправляю свои страницы на https. Есть ли способ понять, если я просто перенаправлен с https?

Лучший источник, который я смог найти, это http://djangosnippets.org/snippets/880/, и он не работает для меня

1 Ответ

5 голосов
/ 27 апреля 2012

Если ваш трафик проходит через какой-то прокси, возможно, тот факт, что вы используете SSL, будет скрыт. Однако прокси-сервер обычно устанавливает HTTP-заголовок (или вы можете настроить его для этого). Одним из вариантов является HTTP_X_FORWARDED_SSL. Heroku устанавливает HTTP_X_FORWARDED_PROTO на https, если вы используете https.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...