0

我正在使用 Flask-Dance 进行 Facebook 登录。

这是蓝图文件

from flask import redirect, url_for
from flask_dance.contrib.facebook import make_facebook_blueprint, facebook

facebook_bp = make_facebook_blueprint(
    redirect_url='http://api.domain.com/auth/social/facebook/authorized'
)

@facebook_bp.route('')
def index():
    if not facebook.authorized:
        return redirect(url_for("facebook.login"))
    resp = facebook.get("/me")
    return resp.text

下面是主要的应用程序文件

from api.auth.facebook import facebook_bp

...
app.register_blueprint(facebook_bp, url_prefix='/auth/social')

当我请求https://api.domain.com/auth/social它时,它会将我重定向到 facebook,它表示 redirect_url 已被阻止。

flask-dance 打开的 facebook url 是链接这个facebook.com/...&redirect_uri=http://api/auth/social/facebook/authorized&...

我什至尝试添加redirect_url蓝图配置,但同样的事情。

该应用程序使用 docker compose nginx 和 gunicorn 部署。

4

2 回答 2

0

您说redirect_uri查询参数与运行 Flask 应用程序的域不匹配。这表明 Flask(不是 Flask-Dance,而是 Flask 本身)正在获取有关其运行的服务器的错误信息(或可能没有信息)。此信息对于安全处理 OAuth 是必需的。

阅读有关代理和 HTTPS 的 Flask-Dance 文档,以及有关代理的 Flask 文档。一旦 Flask 能够正确确定它在哪里运行,Flask-Dance 应该会redirect_uri正确生成。

于 2020-09-24T14:22:37.213 回答
0

请检查

if not facebook.authorized:
    #write redirect_to value as url_for(blueprint.route)
    facebook.blueprint.redirect_to='blueprint.route'
    return redirect(url_for("facebook.login"))
resp = facebook.get("/me")
assert resp.ok, resp.text
return "You are {name} on Facebook".format(name=resp.json()["name"])

在我的情况下,结果 redirect_to 总是没有!如果我这样做如下:

        app.register_blueprint(facebook_bp, url_prefix="/login",redirect_to='user_routes.LoginPage')
于 2020-04-01T21:09:06.583 回答