Почему я всегда получаю ошибку cors, что подстановочный знак * не разрешен, хотя я указал источник на сервере? - PullRequest
0 голосов
/ 09 июля 2019

Я создал простой чат GraphQL с сервером Apollo и клиентом Apollo.

Он также использует сеансовые куки, поэтому я инициализировал сервер с пакетом npm cors, например:

app.use(
  cors({
    credentials: true,
    origin: "http://localhost:3000"
  })
);

На стороне клиента я использую клиент apollo и создаю ссылку http следующим образом:

const httpLink = new HttpLink({
  uri: "http://localhost:4000/graphql",
  credentials: "include"
});

Итак, я включаю учетные данные, и сервер имеет источник моего клиента (который действительно http://localhost:3000 - по умолчанию create-реагировать-приложение).

Когда я хочу выполнить запрос, я получаю эту ошибку в консоли браузера:

Доступ к выборке в 'http://localhost:4000/graphql' из источника' http://localhost:3000' был заблокирован политикой CORS: значение заголовка 'Access-Control-Allow-Origin' в ответе не должно быть подстановочный знак '*', когда режим учетных данных запроса 'include'.

Почему это говорит, что в заголовке ответа установлен подстановочный знак *, но на cors я установил конкретный источник, поэтому он не должен быть правильным подстановочным знаком?

Что мне здесь не хватает, ребята? Я также перезапустил оба сервера, конечно.

Когда я настраиваю клиента так:

const httpLink = new HttpLink({
  uri: "http://localhost:4000/graphql",
  credentials: "same-origin"
});

Я не получаю сообщение об ошибке от cors, но я не получаю куки с сервера. Куки работают, потому что на GraphQL Playground все работает как положено.

Если вы хотите увидеть полный код: https://github.com/SelfDevTV/graphql-simple-chat

1 Ответ

0 голосов
/ 09 июля 2019

Проблема решена.

В моем index.js файле с сервера. Несколько строк ниже я применяю экспресс-приложение в качестве промежуточного программного обеспечения к экземпляру сервера apollo, например:

server.applyMiddleware({ app });

Но это переопределяет параметры cors, которые я установил выше.

Так что я должен назвать это так: server.applyMiddleware({ app, cors: false });

Теперь все работает отлично :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...