В клиенте Apollo, как сделать refetchQueries с заголовками после успешной мутации? - PullRequest
0 голосов
/ 27 января 2019

У меня проблемы с клиентом Apollo, и мне было интересно, может ли кто-нибудь помочь мне здесь.

Как я могу повторно выполнить свой запрос (с заголовками) после успешной мутации, которая возвращает меня на предъявителятокен?

Я обнаружил, что есть что-то, называемое refetchQueries, но, похоже, он игнорирует все заголовки, таким образом, и мой токен на предъявителя.

Скажем, у меня есть следующая мутация в моем компоненте Login:

<Mutation
  mutation={LOGIN_USER}
  refetchQueries={[{
    query: GET_USER,
  }]}
>
  {(loginUser, { loading, error, data }) => {
    if (data) {
      cookies.set('token', data.loginUser.token)
    }
    return (
      <form...

и следующий authLink в моем App.js:

const authLink = setContext((_, { headers }) => {
  const token = cookies.get('token')

  return {
    headers: {
      ...headers,
      authorization: token  ? `Bearer ${token}`  : null
    },
  }
})

Кажется, проблема в том, что функция authLink не работает при использовании refetchQueries (заголовки не отправляются).Когда я обновляю браузер, мой запрос работает нормально, тогда как cookie используется для получения токена, но, похоже, этого не происходит с refetchQueries ...

Итак, как я могу выполнить свой запрос после мутации стокен на предъявителя в заголовке или есть лучший способ сделать это?

Cheers

1 Ответ

0 голосов
/ 28 января 2019

Я не знаю, как вы определяете свои запросы и мутации, но refetchQueries может принимать массив строк с именами запросов, которые будут повторно получены.Я нашел это, чтобы удовлетворить мои потребности.Для этого вам нужно назвать свои запросы.Внутри тега gql объявите ваш запрос как

const GET_USER = gql`
query getUser($id: ID) {
  user(id: $id) {
    name
  }
}
`

Затем вы вызываете refetchQueries с помощью только ['getUser']

О настройке Apollo для автоматической установки заголовков авторизации для каждого запроса, простопосмотрите примеры из документов

Прокрутите вниз до раздела о промежуточном программном обеспечении

...