Я создал простой чат 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