Я не могу получить доступ к заголовку «Авторизация» в каждом HTTP-запросе на моем Apollo-сервере, реализованном с помощью express. Вот моя настройка express, Apollo-Server, CORS и др. c.
const corsConfig = {
credentials: true,
allowedHeaders: ['Authorization'],
exposedHeaders: ['Authorization']
};
const app = express()
const server = new ApolloServer({
schema,
context: ({ req }) => {
return {
req
};
}
});
server.applyMiddleware({
app,
path,
cors: corsConfig
});
http.createServer(app).listen(port, () => logger.info(`Service started on port ${port}`));
И внутри моих преобразователей я ввожу контекст, в частности объект req (это пример graphQL преобразователь конечных точек):
const exampleQuery = async (parent, input , { req }) => {
console.log(req.headers);
/*
The output of this log:
{
'content-type': 'application/json',
accept: '*/*',
'content-length': '59',
'user-agent': 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)',
'accept-encoding': 'gzip,deflate',
connection: 'close',
host: 'localhost:3301',
'Access-Control-Allow-Headers': 'Authorization',
'Access-Control-Expose-Headers': 'Authorization'
}
*/
}
Я отправил запросы на эту конечную точку с заголовком «Авторизация», содержащим токен в качестве значения. Однако заголовка авторизации нет в объекте req.headers (на самом деле, его нет и во всем объекте req). Я уверен, что мои HTTP-запросы Postman / Insomnia к этой конечной точке отправляют заголовок авторизации, однако, похоже, он не проходит через мой Apollo-Server. Кто-нибудь знает, почему заголовок авторизации не проходит? для передачи заголовка авторизации отдельным микросервисам, где находятся преобразователи. Вы должны добавить функцию buildService внутри конструктора ApolloGateway, где вы указываете, что RemoteGraphQLDataSource будетSendRequest of context.req.headers.authentication для базовых микросервисов