Flaskdance不会生成HTTPS uri

时间:2018-11-21 19:30:19

标签: python flask oauth-2.0

我正在尝试使用Flask dance为基于烧瓶的网站设置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(蓝图,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.

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

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

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

unset OAUTHLIB_INSECURE_TRANSPORT

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

1 个答案:

答案 0 :(得分:0)

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

解决方法是使用werkzeug的ProxyFix之类的中间件来告诉Flask它在代理服务器后面。使用方法如下:

https