Это гоночная ситуация.Если сначала функция завершится сначала, вы получите обновленные данные.
Метод getIdTokenResult
принудительно обновляет, но если пользовательское утверждение не готово, оно бессмысленно.
Вам нужноустановить другую структуру управления данными, чтобы инициировать принудительное обновление для клиента.Например, слушатель в реальном времени к rtd;
root.child(`permissions/${uid}`).on..
И логика внутри слушателя будет: if the value for that node exist and is a number greater than some threshold, then trigger the user auth refresh
В течение этого времени пользовательский интерфейс может отображать состояние загрузки, если естьне является ни datasnapshot, ни представлением без прав администратора, если datasnapshot существует, но имеет более низкий уровень разрешений.
В функциях необходимо установить узел после того, как заявка установлена:
..setCustomUserClaims(..).then(
ref.setValue(9)
);
У меня естьболее подробный пример по pastebin