Настройки CORS игнорируются - PullRequest
0 голосов
/ 17 марта 2019

У меня проблема с node.js, очевидно, игнорирующим мои настройки cors.Вот мои репозитории: Backend Frontend

Код виновника в backend:

...
//config.CLIENT_URL is 'http://localhost:3000'

const corsOptions: cors.CorsOptions = {
        origin: [String(config.CLIENT_URL)],
        credentials: true,
    };
    app.use(cors(corsOptions));
...

Реализация Apollo

//config.BACKEND_URL_DEV is 'http://localhost:4000/graphql/'
function create (initialState, { getToken }) {
  const httpLink = createHttpLink({
    credentials: "include",
  uri: `${config.BACKEND_URL_DEV}`,
  })

  const authLink = setContext((_, { headers }) => {
    let token = getToken()
    return {
      headers: {
        ...headers,
        cookie: token ? token : ''
      }
    }
  })

  return new ApolloClient({
    connectToDevTools: process.browser,
    ssrMode: !process.browser, // Disables forceFetch on the server (so queries are only run once)
    link: authLink.concat(httpLink),
    cache: new InMemoryCache().restore(initialState || {})
  })
}

Когда я иду в http://localhost:3000/dashboard, где у меня есть запрос, который, как я знаю, будет выполняться, если я вошел в систему через graphql playground, это сообщение, которое я получаю:

enter image description here

Получены достаточно забавные данные, но CORS не позволяет отображать их.Протестировано на Opera, Chrome и Firefox DevEdition

enter image description here

Похоже, мой бэкэнд устанавливает * в Access-Control-Allow-Origin, если домен источника запроса правильный.

enter image description here

Любое понимание этого вопроса очень ценится!

1 Ответ

1 голос
/ 17 марта 2019

Оказывается, проблема заключалась в передаче cors конфигурации в apollo-server-express, потому что app.use(cors(corsOptions)) на самом деле ничего не делает для такого рода настройки.

ПРАВИЛЬНЫЙ ОТВЕТ: Переместите конфигурацию cors в этот раздел:

apolloServer.applyMiddleware({ app, cors: corsOptions });

Найден ответ благодаря этой нити стека

...