Как заставить redirect_uri использовать HTTPS с python-social-app? - PullRequest
0 голосов
/ 14 мая 2019

Я использую фреймворк django с python-social-app и у меня ошибка при попытке войти с помощью кнопки входа в Facebook.

Мое приложение состоит из трех док-контейнеров:

  1. Приложение Django.
  2. База данных.
  3. NGINX + SSL-сертификат.

Вот моя ошибка:

Процесс аутентификации отменен: URL заблокирован: перенаправление не выполнено потому что URI перенаправления не внесен в белый список в OAuth клиента приложения Настройки. Убедитесь, что Client и Web OAuth Login включены, и добавьте все свои домены приложения как действительные URI перенаправления OAuth. Blockquote

и вот URL, который я вижу при попытке войти

https://www.facebook.com/v2.9/dialog/oauth?client_id=247739632734206&redirect_uri=http%3A%2F%2Fwww.DOMAN_NAME.com%2Fcomplete%2Ffacebook%2F&state=7AySpKwDWAKtiIxP75LBIPqwQNWSu36y&return_scopes=true

Проблема, насколько я понимаю, состоит в том, что redirect_uri начинается с HTTP, а не с HTTPS.

Django==2.2
social-auth-app-django==3.1.0
social-auth-core==3.1.0

Мое лучшее предположение о проблеме заключается в том, что приложение Django не «знает», что оно работает за NGINX + SSL и генерирует redirect_uri с протоколом HTTP вместо HTTPS.

Настройки Facebook имеют правильный URI перенаправления, который начинается с HTTPS. Проблема не относится к Facebook, redirect_uri для Google имеет ту же проблему.

Как я могу заставить Python-social использовать HTTPS?

Ответы [ 2 ]

1 голос
/ 09 июля 2019

То, что вы должны искать, это добавить строку ниже в settings.py вашего приложения Django.

SOCIAL_AUTH_REDIRECT_IS_HTTPS = True

Таким образом, redirect_uri, созданный социальной сетью django, содержит https.

В соответствии с приведенным выше ответом вы вместо этого перенаправили трафик http на https, который по-прежнему будет проблемой, если вы 'пытаемся создать сервер только для https.

0 голосов
/ 14 мая 2019

Вот настройки, которые мне помогли:

Настройки Django:

# settings.py
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

Настройки nginx:

location / {
    # ... 
    proxy_set_header X-Forwarded-Proto $scheme;
}

источник: Как развернуть сайт только для HTTPS с Django / nginx?

...