Как прослушивать изменения в пользовательских утверждениях Firebase?

Я создаю приложение в Ionic Vue с Firebase в качестве бэкэнда. Я использую пользовательские утверждения Firebase для назначения ролей пользователей («платный пользователь» или «бесплатный пользователь»), и я настроил облачную функцию, которая без проблем назначает роли.

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

onAuthStateChanged(auth, () => {
  if (auth.currentUser) {
    auth.currentUser.getIdTokenResult(true).then((idTokenResult) => {
      console.info(idTokenResult);
      auth.currentUser.subscriber = idTokenResult.claims.subscriber;
    });
  }
// Run app
});

Каков наилучший подход к прослушиванию изменений, когда пользователю назначается новая роль?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Это невозможно со службой аутентификации Fireabse. Вы должны реализовать свой собственный механизм: например, иметь документ Firestore для каждого пользователя и сохранить роль пользователя в этом документе. Таким образом, вы можете установить прослушиватель в реальном времени для документа Firestore пользователя и получать оповещения в интерфейсе о том, что роль пользователя изменилась.

Обратите внимание, что это будет реализовывать только систему оповещения. Вам все равно придется обновить токен с помощью firebase.auth().currentUser.getIdTokenResult() (как показано в документе ), чтобы отразить новую роль в вашем внешнем интерфейсе.

Большое спасибо за ваш ответ Рено. Будет ли лучшим подходом настроить прослушиватель в реальном времени через Vuex или Pinia, а затем использовать его на каждой странице, где мне нужно отслеживать изменения?

Frederik 08.01.2023 12:56

Настройка прослушивателя Firestore в вашем магазине действительно является одним из возможных вариантов.

Renaud Tarnec 08.01.2023 13:59

Разве нет Firebase Realtime Database, а затем настроить Realtime Database triggers для этой цели? Мне понадобится нечто подобное, поэтому и спрашиваю...

SinisaM 08.01.2023 22:02

@SinisaM, если у вас есть вопрос, который не полностью связан с этим вопросом и ответом, я предлагаю создать новый вопрос в SO.

Renaud Tarnec 08.01.2023 22:39

Другие вопросы по теме