Проблема запроса CORS для React-router-redux и redux-saga - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь реализовать аутентификацию в новом приложении React на основе Core UI, тогда как у меня есть старая функциональная версия, использующая другую тему в Angular 5.

Я пытался следовать этому учебное пособие, но оно дает мне такую ​​ошибку:

Запрос перекрестного источника заблокирован: та же политика происхождения запрещает чтение удаленного ресурса на https://myapp.url (причина: заголовок CORS 'Access-Control-Allow-Origin 'отсутствует).

каждый раз, когда я пытаюсь войти (в то время как тот же самый бэкэнд работал с Angular).

Моя конфигурация бэкэнда следующая:

Origins:         "*",
Methods:         "GET, PUT, POST, DELETE",
RequestHeaders:  "Origin, Authorization, Content-Type, X-Requested-With, Accept, Token",
ExposedHeaders:  "",

и мой источник Saga.js: import {call, put, takeLatest} из 'redux-saga / Effects';

import { AUTH_REQUEST, AUTH_SUCCESS, AUTH_FAILURE } from './reducer';

const fetchJSON = (url, options = {}) =>
  new Promise((resolve, reject) => {
    return fetch(url, options)
      .then(response => (response.status !== 200 ? reject(response) : response))
      .then(response => response.json())
      .then(response => resolve(response))
      .catch(error => reject(error));
  });

function* authorize({ payload: { login, password } }) {
  const options = {
    body: JSON.stringify({ login, password }),
    method: 'POST',
    headers: {  'Content-Type': 'application/json' ,
                'Access-Control-Allow-Origin': '*',
                'Access-Control-Allow-Headers' : 'Origin, Content-Type,  X-Requested-With, Accept'}
  };

  try {
    //TODO: replace URL by a dynamic one
    console.log(options.headers);
    const { token } = yield call(fetchJSON, 'https://myapp.url', options);
    yield put({ type: AUTH_SUCCESS, payload: token });
    localStorage.setItem('token', token);
  } catch (error) {
    let message;
    switch (error.status) {
      case 500: message = 'Internal Server Error'; break;
      case 401: message = 'Invalid credentials'; break;
      default: message = 'Something went wrong';
    }
    yield put({ type: AUTH_FAILURE, payload: message });
    localStorage.removeItem('token');
  }
}

function* Saga() {
  yield takeLatest(AUTH_REQUEST, authorize);
}

export default Saga;

Когда я просматриваю свои журналы бэкэнда,Я просто получаю запрос OPTION Rest без POST.

У вас есть идеи, как это исправить?Спасибо

...