Как исправить: «Origin-1000 * не разрешен Access-Control-Allow-Origin». - с колбой - PullRequest
0 голосов
/ 07 октября 2019

Я настроил сервер с флягой CORS, и он работал для отправки данных в веб-приложение React, которое я создал, но когда я начал тестировать метод POST, он перестал работать, и теперь он не работает для отправки и получения. Журнал ошибок в консоли веб-приложения: «Origin-1001 *http://localhost:3000 не разрешен Access-Control-Allow-Origin. Fetch API не может загрузить http://127.0.0.1:5000/ из-за проверок контроля доступа.»

Я столкнулся с этой проблемой ранее и добавил flask_cors, и это работало некоторое время. Вот мой код сервера:

from flask_cors import CORS, cross_origin

app = FlaskAPI(__name__)
app.config['SECRET_KEY'] = 'the quick brown fox jumps over the lazy dog'
app.config['CORS_HEADERS'] = 'Content-Type'

cors = CORS(app, resources={r"/": {"origins": "http://localhost:port"}})
# Also fails with this variation
# cors = CORS(app, resources={r"/api/*": {"origins": "*"}})

@app.route("/", methods=['GET', 'POST'])
@cross_origin(origin='localhost',headers=['Content- Type','Authorization'])
# Also fails with these variations
# @cross_origin(origin='http://127.0.0.1:5000/',headers=['Content- Type','Authorization'])
# @cross_origin(origin='http://localhost:3000',headers=['Content- Type','Authorization'])  
def job_api():
    with app.app_context():
        job_data = get_job_data()
        json_data = jsonify(eqtls=[job.data for job in job_data])
        return json_data

if __name__ == "__main__":
    app.run(debug=True)

Вот мой код клиента:

  componentDidMount() {
        fetch('http://127.0.0.1:5000/')
        .then(res => res.json())
        .then((data) => {
          this.setState({ job_data: data.eqtls })
        })
        .catch(console.log)
  }

1 Ответ

2 голосов
/ 07 октября 2019

Вам необходимо включить политику CORS в своем API, чтобы он мог принимать запросы от разных хостов.

Просто выполните Google Flask Cors и убедитесь, что вы принимаете '*' или, в частности, ваш URL.

Если вы принимаете Cors, хотя вы должны быть в состоянии принять все CORS, а затем сделать свой API достаточно надежным, чтобы нельзя было запрашивать неприятные данные

Попробуйте:

from flask_cors import CORS, cross_origin

app = FlaskAPI(__name__)
app.config['SECRET_KEY'] = 'the quick brown fox jumps over the lazy dog'
app.config['CORS_HEADERS'] = 'Content-Type'


@app.route("/", methods=['GET', 'POST'])
@cross_origin()
def job_api():
    with app.app_context():
        job_data = get_job_data()
        json_data = jsonify(eqtls=[job.data for job in job_data])
        return json_data

if __name__ == "__main__":
    app.run(debug=True)

Я прочитал документацию и могу просто добавить @cross_origin () в качестве простого декоратора: https://flask -cors.readthedocs.io / en / latest / # route-specific-cors-via-decorator

...