Flaskdance не генерирует HTTPS URI - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь настроить вход в Google с использованием Flask Dance для веб-сайта на основе фляги:

from flask_dance.contrib.google import make_google_blueprint, google
blueprint = make_google_blueprint(
client_id= "CLIENT_ID",
client_secret="CLIENT_SECRET",
scope=[
    "https://www.googleapis.com/auth/plus.me",
    "https://www.googleapis.com/auth/userinfo.email",
]
)

app.register_blueprint (blueprint, url_prefix = "/ google_login")

И, как следует из документации, у меня настроено представление так:

@app.route('/google_login')
def google_login():
if not google.authorized:
    return redirect(url_for("google.login"))
resp = google.get("/oauth2/v2/userinfo")
assert resp.ok, resp.text
return "You are {email} on Google".format(email=resp.json()["email"])

Когда я тестировал, я установил для переменной среды OAUTHLIB_INSECURE_TRANSPORT значение 1, используя

export OAUTHLIB_INSECURE_TRANSPORT=1

Итеперь даже после того, как я удалил переменную окружения, по какой-то причине Flaskdance, кажется, всегда разрешает URI к http вместо HTTPS.

Это видно из полученной мной ошибки несоответствия URI перенаправления (здесь веб-сайт ссылается на доменное имя):

The redirect URI in the request, 
http://"website"/google_login/google/authorized, does not match 
the ones authorized for the OAuth client.

А вот авторизованные URI перенаправления, которые я настроилв моей облачной консоли Google:

https://"website"/google_login/google/authorized
https://www."website"/google_login/google/authorized

Я попытался сбросить переменную среды с помощью этой команды:

unset OAUTHLIB_INSECURE_TRANSPORT

Чего мне здесь не хватает?Любая помощь будет оценена.

1 Ответ

0 голосов
/ 25 июля 2019

Если Flask-Dance генерирует http URL вместо https, это указывает на то, что Flask (не Flask-Dance, а сама Flask) не понимает, является ли входящий запрос запросом https или нет. Flask-Dance имеет некоторую документацию о том, как решить эту проблему , и наиболее вероятной причиной является прокси-сервер, который обрабатывает HTTPS отдельно от вашего сервера приложений.

Исправление заключается в использованиипромежуточное программное обеспечение, такое как ProxyFix от werkzeug, для обучения Flask, что оно находится за прокси-сервером.Вот как вы можете его использовать:

from werkzeug.middleware.proxy_fix import ProxyFix

app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...