Access-Control-Allow-Origin не *, но Chrome настаивает, что это так (после обновления apollo-server) - PullRequest
0 голосов
/ 26 сентября 2018

Были некоторые функции, которые я хотел получить от apollo-server и потратил некоторое время на рефакторинг своего кода (ранее он использовал express-graphql).Единственной проблемой сейчас является проблема «CORS» между моим веб-приложением (использующим apollo-client) для аутентифицированных запросов.Я вспоминаю о том, что эта проблема также была в версии 1.x, и я потратил много времени на ее борьбу, но мое предыдущее решение не работает в 2.x, и я был бы очень признателен за помощь для тех, кому удалось это решить.Работаздесь , у меня есть следующее:

Код клиента

const client = new ApolloClient({
    link: createHttpLink({
        uri: 'http://localhost:4000/graphql', 
        credentials: 'include'
    })
})

Код сервера

// Initializing express app code 
var app = ....
// Using cors
app.use(cors({
    credentials: true, 
    origin: 'http://localhost:8081',
}));

// Apollo Server create and apply middleware
var apolloServer = new ApolloServer({ ... });
apolloServer.applyMiddleware({ app })

Когда клиент запрашивает серверную часть через.apollo-client, я получаю следующую ошибку в Chrome:

enter image description here

Тем не менее, в моем коде сервера я явно устанавливаю источник.Когда я проверяю сетевой запрос в консоли, я получаю противоречивую историю, а Access-Control-Allow-Origin явно установлен на http://localhost:8081

enter image description here

Донне встречаются с этой проблемой при использовании Insomnia для запроса моего внутреннего сервера и получения ожидаемых результатов.У кого-нибудь есть опыт установки apollo на клиенте и сервере на localhost и успешной аутентификации?

1 Ответ

0 голосов
/ 27 сентября 2018

Я на самом деле просто тупой.Я смотрел неправильный ответ, на него был добавлен sideshowbarker, apollo-server-v2 автоматически переопределяет CORS и по умолчанию устанавливает заголовок Access-Control-Allow-Origin на *.Даже если в вашем экспресс-приложении указан CORS, и вы применяете его в качестве промежуточного программного обеспечения для apollo-server, этот параметр будет переопределен для маршрутов GraphQL.Если кто-то столкнется с этой проблемой, надеюсь, это сэкономит время:

https://github.com/apollographql/apollo-server/issues/1142

Теперь вы можете явно указать CORS для apollo-server в его методе applyMiddleware: https://www.apollographql.com/docs/apollo-server/api/apollo-server.html#Parameters-2

...