首页 > 解决方案 > Flask-Dance facebook 无效的 redirect_url

问题描述

我正在使用 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 部署。

标签: dockerflaskfacebook-oauthflask-dance

解决方案


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

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


推荐阅读