Запрос текущего пользователя .once ('value') в Firestore - PullRequest
0 голосов
/ 12 декабря 2018

Я перемещаю базу данных Firebase в реальном времени в базу данных Firebase Firestore, но у меня возникают проблемы с поиском подходящей ссылки для запроса текущего пользователя.

onAuthUserListener = (next, fallback) =>
this.auth.onAuthStateChanged(authUser => {
  if (authUser) {
    this.user(authUser.uid)
      .once('value')
      .then(snapshot => {
        const dbUser = snapshot.val();

        // default empty roles
        if (!dbUser.roles) {
          dbUser.roles = [];
        }

        // merge auth and db user
        authUser = {
          uid: authUser.uid,
          email: authUser.email,
          emailVerified: authUser.emailVerified,
          providerData: authUser.providerData,
          ...dbUser,
        };

        next(authUser);
      });
  } else {
    fallback();
  }
});

В частности, что будет заменой once('value') и snapshot.val();?

Я думал, что

.onSnapshot(snapshot => {
  const dbUser = snapshot.val();
  ...

1 Ответ

0 голосов
/ 12 декабря 2018

Эквивалент once('value' в Firestore называется get(), а эквивалент val() равен data().Вызов get() возвращает обещание, поэтому:

.get().then(snapshot => {
  const dbUser = snapshot.data();
  ...

Если у вас есть коллекция пользователей, где профиль каждого пользователя хранится в документе с его UID в качестве идентификатора, вы можете загрузить его с помощью:

firebase.firestore().collection('users').doc(authUser.uid)
  .get()
  .then(snapshot => {
    const dbUser = snapshot.val();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...