首页 > 解决方案 > Flask-cors 没有按照配置拒绝来源

问题描述

我正在尝试将 flask-cors(3.0.8) 与 flask-restplus(0.13.0) 一起使用,允许某些来源并拒绝其他来源,但 cors 不会拒绝任何跨来源请求。

我的架构以使用 3 个文件来初始化我的应用程序的方式进行处理:

1. app/__init__py(声明我的蓝图)

from flask_restplus import Api
from flask import Blueprint
...

BLUEPRINT = Blueprint("api", __name__)
API = Api(BLUEPRINT)
...

2. app/main/__init__.py(带有我的create_app函数,带有CORS)

...

def create_app()
  app = Flask(__name__)

  CORS(app, resources={r"/*": {"origins": r".*\.mydomain.com"}})
...

3. manage.py(包含我的主进程)

from app.main import create_app
from app import BLUEPRINT
...

APP = create_app(os.getenv("APP_ENV", "dev"))
APP.register_blueprint(BLUEPRINT)
APP.app_context().push()
...

if __name__ == "__main__":
  APP.run(host="0.0.0.0", port=80)

这种方法正在初始化我的应用程序,但我的 API 允许来自所有域的所有请求,而不是像配置的那样只允许来自 something.my-domain.com 的请求。

有人已经有这个问题了吗?

标签: python-3.xflaskflask-restplusflask-cors

解决方案


我认为您没有使用 App Factory 模式正确初始化扩展。

https://github.com/corydolphin/flask-cors/blob/master/flask_cors/extension.py#L131

app/main/__init__.py中,尝试:

...

cors = CORS()


def create_app()
    app = Flask(__name__)

    cors.init_app(app, resources={r"/*": {"origins": r".*\.mydomain.com"}})
...

完整示例:https : //gitlab.com/testdriven/flask-react-auth/blob/master/services/users/project/init .py


推荐阅读