Как запустить асинхронную функцию и установить заголовки для каждого запроса в Apollo? - PullRequest
0 голосов
/ 09 ноября 2018

Допустим, я хочу получить токен firebase auth и установить его для каждого запроса. Чтобы получить токен аутентификации firebase, мне нужно отправить асинхронный вызов на сервер firebase. Только когда он завершится, я получу токен. Я попытался установить его, как показано ниже. Но Аполлон отправляет запрос до того, как я получу токен от Firebase. Как я могу это исправить? Как я могу заставить Аполлона ждать?

export const client = new ApolloClient({
  uri: 'http://localhost:4000/',
  request: async operation => {
    await firebase.auth().onAuthStateChanged(async user => {
      if (user) {
        const token = await firebase.auth().currentUser.getIdToken(/* forceRefresh */ true);

        operation.setContext({
          headers: {
            authorization: token ? `Bearer ${token}` : ''
          }
        });
      }
    });
  }
});
...