Как включить CORS в приложении EmberJS?

У меня есть приложение EmberJS, которое использует данные ember-data для доступа к данным через REST API. API REST работает на одном компьютере, но на другом порту (хотя это, вероятно, относится к REST API, которые обслуживаются из другого домена.

Когда я перехожу к URL localhost:4200/items, я получаю следующую ошибку в консоли Firefox:

Политика безопасности контента. Параметры страницы заблокировали загрузку ресурса в http://localhost:7654/api/items ( "connect-src http://localhost:4200 ws://localhost: 35729 ws://0.0.0.0: 35729 http://0.0.0.0:4200" ).

Я попытался установить ember-cli-cors, но ничего не изменилось. Я также пробовал решение на http://discuss.emberjs.com/t/ember-data-and-cors/3690, но это тоже не сработало. Это обсуждение было с 2013 года, так что не было огромного сюрприза.

API REST написан на python с использованием Flask и Flask-cors. Используя вкладку "Сеть", я вижу, что запрос отправляется, а данные отправляются обратно, но ошибка все еще существует. Заголовок Access-Control-Allow-Origin установлен в http://localhost:4200 в ответе, как ожидалось.

приложение /router.js

import Ember from 'ember';
import config from './config/environment';

var Router = Ember.Router.extend({
  location: config.locationType
});

export default Router.map(function() {
  this.route('items');
});

приложение/адаптеры/application.js

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  namespace: 'api',
  host: 'http://localhost:7654',
});

приложение/маршруты/items.js

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return this.store.find('item');
  }
});

приложения/модели/item.js

import DS from 'ember-data';

export default DS.Model.extend({
  name: DS.attr(),
});

приложение/шаблоны/items.hbs

{{#each item in items}}
  {{ item.name }}<br>
{{else}}
  <p>No items</p>
{{/each}}

{{outlet}}

Ответ 1

Это проблема CSP, а не CORS

Внутри config/environment.js найдите ENV.contentSecurityPolicy и добавьте http://localhost:7654 к ключу 'connect-src'

например.

ENV.contentSecurityPolicy = {
  // ... other stuff here
  'connect-src': "'self' http://localhost:7654"
}

Возможно, вам понадобится другая настройка для вашей производственной среды.