Вместо того, чтобы передавать заголовки непосредственно в ваш экземпляр клиента Apollo, вы обычно хотите использовать apollo-link-context
.Вы можете хранить фактические значения заголовка в памяти, LocalStorage или в любом другом месте, которое имеет смысл для вашего приложения.Затем используйте ссылку, чтобы вставить их в каждый запрос перед его отправкой:
const headerLink = setContext((request, previousContext) => ({
headers: {
// Make sure you include any existing headers!
...previousContext.headers,
authorization: localStorage.getItem('authHeader')
},
}));
const client = new ApolloClient({
link: headerLink.concat(httpLink),
cache: new InMemoryCache()
});
setContext
может быть асинхронным.Функция, которую вы передаете, должна возвращать либо объект с полями контекста, которые вы хотите изменить, либо Promise, который разрешается в одно:
const headerLink = setContext(async (request, previousContext) => {
const authorization = await someAsyncCall()
return {
headers: {
...previousContext.headers,
authorization,
},
}
});
Вы можете проверить документы длядополнительные примеры.