我正在尝试使用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
我在这里想念什么?任何帮助将不胜感激。
答案 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