如何使用 flask-cors 库修复 python flask cors 问题

Posted

技术标签:

【中文标题】如何使用 flask-cors 库修复 python flask cors 问题【英文标题】:How to fix python flask cors issue using flask-cors library 【发布时间】:2021-10-11 11:14:20 【问题描述】:

我真的需要一些帮助。我无法弄清楚我做错了什么。我不断得到

编辑:前端 React 应用程序在 localhost:3000 上运行,后端在 localhost:5000 上运行

从源“http://localhost:3000”访问“http://localhost:5000/api/auth/login”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

def create_app(test_config=None):

    logger = logging.getLogger(__name__)
    logger.info("Flask App Starting")
    # create and configure the app
    app = Flask(__name__, instance_relative_config=True)
    CORS(app)
    cors = CORS(app, resources=r"/api/*": "origins": "*")
    logging.getLogger('flask_cors').level = logging.DEBUG
    
    app.config.from_mapping(
        SECRET_KEY="dev",
        JWT_SECRET_KEY="super secret key", 
        JWT_ACCESS_TOKEN_EXPIRES=timedelta(hours=2), 
    )
    
    if test_config is None:
        # load the instance config, if it exists, when not testing
        app.config.from_pyfile("config.py", silent=True)
    else:
        # load the test config if passed in
        app.config.from_mapping(test_config)


    jwt = JWTManager(app)

    

    """
    Adding blueprints 
    """
    from app.routes import tester
    from app.routes import auth
    from app.routes import api_routes
    from app.routes import similar_routes

    app.register_blueprint(tester.bp)
    app.register_blueprint(auth.bp)
    app.register_blueprint(api_routes.bp)
    app.register_blueprint(similar_routes.bp)

    @app.before_request
    def check_login():
        """Before each request check if token exist."""
        pass 
        logger.info("Checking if token is required")
        if (not getattr(app.view_functions[flask.request.endpoint], "is_public", False)):
            logger.info("Token required")
            try:
                result = verify_jwt_in_request(locations="headers")

                logger.debug(f"Identity sent in is get_jwt_identity()")
            except Exception as e:

                logger.error("Error occured during checking token")
                logger.error(e)
                return jsonify(msg="Token Expired"),401


    @app.errorhandler(Exception)
    def all_exception_handler(error):
        logger.error("Error caught" + str(error) )
        return jsonify(msg="Oh no! A Server error occured. :,( "), 500


    return app

if __name__ == "__main__":
    loggingSetup()
    app = create_app()
    logger.info("App Created")
    app.run(debug=True)
    logger.info("App Running")

我正在使用 axios 从我的反应前端进行 API 调用

axios.defaults.baseURL = "http://localhost:5000/api"
function getHeaders(token)
        return 
            'Accept': 'application/json',
            'Content-Type': 'application/json;charset=UTF-8',
            "Authorization": "Bearer " + token,
            'Access-Control-Allow-Origin': '*'
        
    

async function createCustomObject(token) 
        let url = "/ontology/create-object";
        let options = 
            method: "POST",
            url: url,
            headers: getHeaders(token),
        ;
        let response = await axios(options).then((response) => 
            let data = response.data
        ).catch((error) => 
            handleError(error.response)
        )
        return response;

我错过了什么?

【问题讨论】:

【参考方案1】:

您可以将您的来源设置为http://localhost:3000

cors = CORS(app, resources=r"/api": "origins": "http://localhost:3000")
'Access-Control-Allow-Origin': 'http://localhost:3000'

【讨论】:

这样做可以让这个“”从源 'localhost:5000/api/auth/login' 访问 XMLHttpRequest 从源 'localhost:3000' 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。""" 你在javascript网站上也设置了吗?我已经编辑了答案。您应该使用前端的 url。 您能否详细说明您所说的 javascript 网站的含义?你指的是 axios 请求中的 headers 吗? 是的。我已经编辑了答案,你可以看看。

以上是关于如何使用 flask-cors 库修复 python flask cors 问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Flask-Cors 在生产中没有检测到我的跨域域?

Flask-Cors 不工作 Nuxt + Flask(使用 JWT)

flask-cors

应用 jwt auth 包装器时,Flask-cors 包装器不起作用。

将Python的库路径添加到系统环境变量PYTHONPATH中,如python安装在C:PYTHO

如何使用支持库 23 修复缩放的 FloatingActionButton 上的阴影