尽管在Flask中设置了响应标头,但CORS错误

时间:2020-06-11 20:48:24

标签: python reactjs flask axios cors

我有一个托管在localhost:5000上的flask端点,我试图将请求发送到托管在localhost:3000上的React应用。端点如下所示:

Date

我使用axios从前端调用它,如下所示:

@app.route('/createUserSession', methods=["POST", "OPTIONS", "GET"])
@cross_origin()
def createUserSession():
    response = Response()
    response.headers["Access-Control-Allow-Origin"] = "http://localhost:3000"
    response.headers["Access-Control-Allow-Methods"] = ["GET", "POST", "OPTIONS"]
    response.headers["Access-Control-Allow-Credentials"] = "true"
    return response

我尝试了标头的各种排列,每次收到CORS错误时,都会告诉我不允许原点或凭据标头设置为false。除了使用代理之外,还有其他解决方案吗?谢谢!

1 个答案:

答案 0 :(得分:0)

尝试使用Flask-CORS(https://flask-cors.readthedocs.io/en/latest/)。在已初始化Flask应用程序的地方初始化Flask-CORS。在代码上下文中,Flask-CORS官方文档中所述的简单用例是:

from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
cors = CORS(app, resources={r"/createUserSession": {"origins": "*"}})

@app.route("/createUserSession")
def createUserSession():
  return "user session response"

最好在API端点中使用前缀,以便可以将相似类型的端点分组在一起。例如,您可以将端点更改为@app.route("/api/createUserSession")

使用此方法后,您的CORS实例将为cors = CORS(app, resources={r"/api/*": {"origins": "*"}}),从而使在同一个CORS实例中使用前缀/ api覆盖其他API端点变得更加容易