В моем приложении я использую реаги, редукс и наблюдаемый редукс .
Я добавил эпопею, которая прослушивает действие «LOCATION_CHANGE» реагирующего маршрутизатора и на основе этой полезной нагрузки запускает запрос ajax.
Для каждого запроса сервер ожидает заголовок, содержащий apiKey.
Этот apiKey - это то, что я получаю от firebase auth getIdToken () method.
Итак, я завернул свои вызовы ajax так:
function getApiKey() {
const currentUser = window.firebase.auth().currentUser
return from(currentUser.getIdToken()).pipe(take(1))
}
export const getJson = url =>
getApiKey().pipe(
filter(apiKey => apiKey),
mergeMap(apiKey =>
ajax.get(url, {
apiKey
})
)
)
Причина, по которой мне нужно каждый раз получать токен из API Firebase вместо простого его сохранения в localstorage, заключается в том, что в случае истечения срока действия ключа этот метод обновит его и вернет новый действительный ключ.
Проблема в том, что currentUser равен нулю в течение тех нескольких миллисекунд, которые запускает приложение, но эпопеи пытаются извлечь данные на основе местоположения маршрута до инициализации модуля аутентификации firebase, поэтому я в итоге получаю:
«Не удается найти currentUser of undefined» или подобное сообщение.
Документы Firebase предлагают использовать " onAuthStateChanged ", для которого вызывается его обратный вызов, как только пользователь становится доступным, однако я не знаю, как встроить его в текущий поток.
Помощь здесь очень ценится!
Спасибо.