Вызов user.getIdTokenResult(true) в Firebase заставляет всех прослушивателей документов снова возвращать последние данные

# #angular #firebase #google-cloud-firestore #angularfire

Вопрос:

Похоже, что вызов user.getIdTokenResult(true) приводит к тому, что все прослушиватели моих документов повторно отправляют последние данные.

Это вызывает ненужную локальную обработку, поскольку данные фактически не изменились в Firestore.

Кто — нибудь знает, почему это происходит? Считаются ли они чтением в Firestore?

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

Комментарии:

1. Я знаю недостаточно, чтобы ответить на ваш вопрос, и проблема принудительного обновления токена, влияющего на слушателей, неслыханна, но возможна. Возможно, Firebase могла бы знать больше, но она узкоспециализирована на логику слушателя, которая не задокументирована. Вместо этого я бы предложил использовать onIdTokenChanged() для реагирования на пользовательские утверждения, а не для их частого обновления. если этот метод недостаточно быстр, я предлагаю использовать прослушиватель базы данных, который реагирует на обновление профиля пользователя с помощью флага для пользовательских утверждений

2. @DigiByte Да, использование прослушивателя в базе данных-хорошее предложение. Я сделал это для другого проекта, и он хорошо работает. Я также удалил большую часть обновлений токенов из своего кода, поскольку они не были нужны. Мне все еще любопытно, почему это происходит и является ли это ошибкой firebase, поэтому я обращусь в службу поддержки Firebase по этому поводу.

3. это не было бы ошибкой, поскольку логика, лежащая в ее основе, заключалась бы в замене одного пользователя другим, и если бы у кого-то было разрешение на чтение в защищенной коллекции против любых изменений пользователя или пользовательских утверждений, имеет смысл отозвать/обновить прослушиватели