gpt4 book ai didi

python - Flaskdance 不生成 HTTPS uri

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:05 25 4
gpt4 key购买 nike

我正在尝试使用 Flask dance 为基于 Flask 的网站设置 Google 登录:

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")

正如文档所示,我的 View 设置如下:

@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.

以下是我在 Google 云控制台中设置的授权重定向 URI:

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

我尝试使用此命令取消设置环境变量:

unset OAUTHLIB_INSECURE_TRANSPORT

我在这里缺少什么?任何帮助将不胜感激。

最佳答案

如果 Flask-Dance 生成的是 http URL 而不是 https,则表明 Flask(不是 Flask-Dance,而是 Flask 本身)对传入请求是否存在感到困惑是否为 https 请求。 Flask-Dance has some documentation about how to resolve this problem ,最可能的原因是代理服务器与应用程序服务器分开处理 HTTPS。

修复方法是使用像 werkzeug 的中间件 ProxyFix告诉 Flask 它位于代理服务器后面。使用方法如下:

from werkzeug.middleware.proxy_fix import ProxyFix

app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1)

关于python - Flaskdance 不生成 HTTPS uri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53419295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com