Я пытаюсь реализовать социальную регистрацию в Google локально, используя Flask, Google App Engine и Flask-dance.
Я последовал примеру, предоставленному автором Flask-dance из этой ссылки .
Это основной файл:
from flask import Flask, url_for, redirect
from flask_dance.contrib.google import make_google_blueprint, google
from flask_dance.consumer import oauth_authorized, oauth_error
from werkzeug.contrib.fixers import ProxyFix
app = Flask('application')
app.wsgi_app = ProxyFix(app.wsgi_app)
# You must configure these 3 values from Google APIs console
# https://code.google.com/apis/console
GOOGLE_CLIENT_ID = 'my-client-id'
GOOGLE_CLIENT_SECRET = 'my-client-secret'
app.config["GOOGLE_OAUTH_CLIENT_ID"] = GOOGLE_CLIENT_ID
app.config["GOOGLE_OAUTH_CLIENT_SECRET"] = GOOGLE_CLIENT_SECRET
google_bp = make_google_blueprint(
client_id=app.config['GOOGLE_OAUTH_CLIENT_ID'],
client_secret=app.config['GOOGLE_OAUTH_CLIENT_SECRET'],
redirect_to="index_man_2",
scope=["https://www.googleapis.com/auth/userinfo.profile",
"https://www.googleapis.com/auth/userinfo.email"]
)
app.register_blueprint(google_bp, url_prefix="/login")
@app.route("/login-gmail")
def index_gmail():
if not google.authorized:
return redirect(url_for("google.login"))
resp = google.get("/oauth2/v1/userinfo")
assert resp.ok, resp.text
return "ok"
Когда я получаю доступ к http://localhost:8080/login-gmail,, сервер перенаправляет меня, чтобы выбрать страницу аккаунта Google.Затем, когда я выбираю учетную запись, я получаю эту ошибку:
INFO 2019-07-11 14: 47: 13,476 module.py:861] default: "GET / login / google HTTP / 1.1«302 989 ПРЕДУПРЕЖДЕНИЕ 2019-07-11 14: 47: 21,345 urlfetch_stub.py:575] Удаление запрещенных заголовков из запроса URLFetch: ['Content-Length'] ПРЕДУПРЕЖДЕНИЕ 2019-07-11 13: 47: 21,828 connectionpool.py:403] Не удалось проанализировать заголовки (url = https://accounts.google.com:443/o/oauth2/token): ожидаемый httplib.Message, полученный. Трассировка (последний последний вызов): файл "C: \ Users \ tah \ Documents \ some-name \ m \ src \ lib \urllib3 \ connectionpool.py ", строка 399, в _make_request assert_header_parsing (httplib_response.msg) Файл" C: \ Users \ Tah \ Documents \ some-name \ m \ src \ lib \ urllib3 \ util \ response.py ", строка 56, в assert_header_parsing type (headers))) TypeError: ожидаемый httplib.Message, полученный.сообщение об ошибке: EXCEPTION IN (1982, ('Соединение разорвано: IncompleteRead (чтение 35 байт)', IncompleteRead (чтение 35 байтов))) ('Соединение разорвано: IncompleteRead (чтение 35 байт)', IncompleteRead (чтение 35 байт)) INFO2019-07-11 13: 47: 21,884 recording.py:676] Сохранено;ключ: appstats : 041000, часть: 455 байтов, полная: 18063 байта, служебные данные: 0,000 + 0,012;ссылка: http://localhost:8080/_ah/stats/details?time=1562852841009 INFO
2019-07-11 14: 47: 21895 module.py:861] по умолчанию: «GET / Войти / Google / уполномоченный государственный = sfUHmqfKiy61fnvh1UUsVydJv3vO5L и код = 4% 2FgwHWN8roL2HIxqxtBoFKySXod_jErJ0NB7ofNpdFtLwS2Zebc2rx959sPDOvUThrdlKfQEKWAj0bEbtJxBsskao и сфера = электронная почта + профиль+ https% 3A% 2F% 2Fwww.googleapis.com% 2Fauth% 2Fuserinfo.profile + https% 3A% 2F% 2Fwww.googleapis.com% 2Fauth% 2Fuserinfo.«500 41241
С этот ответ , я понимаю, что если Flask-Dance генерирует URL перенаправления с использованием HTTP, это означает, что Flask считает, что входящий запрос использует HTTP.Если входящий запрос на самом деле использует HTTPS, то Flask где-то запутывается, в основном из-за прокси.Но этот ответ не сказал нам, как исправить ошибку.
Спасибо за ваши ответы.