Как получить ключ из запроса Firebase в Javascript - PullRequest
0 голосов
/ 10 февраля 2019

Как получить ключ, где UID будет равен: firebase.auth().currentUser.uid, потому что я могу обновить эту информацию, когда пользователь вводит новые данные.

Как обновить информацию?Я использую orderByChild и равно и установлено, но не работает.

enter image description here

Мой код:

updateUserInformation() {
  var ref = firebase.database().ref('/users/');
  ref.on('value', (snapshot) => {
    snapshot.forEach((child) => {
      if (child.val().UID == firebase.auth().currentUser.uid) {
        this.profileData = [{
          name: child.val().name,
          lastname: child.val().lastname,
          phone: child.val().phone,
          direction: child.val().direction,
          followQuantity: child.val().followQuantity,
          points: child.val().points,
          sex: child.val().sex,
        }];
        this.cdRef.detectChanges();
      }
    });
  })
}

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Вот пример с Firestore и ES6 Promises.Если вы подумаете о переходе на Firestore, запрос будет выглядеть так:

    updateUserData = (user) => {

    return new Promise((resolve, reject) => {
        firebaseService.firestore()
            .collection('users')
            .doc(user.id)
            .update({
                name: user.name,
                lastname: user.lastname,
                ...
                })
            .then(() => {
                resolve();
            })
            .catch(function (error) {
                reject(error);
            });
    });
}
0 голосов
/ 11 февраля 2019

Ответ @SiddAjmera правильный.Это также показывает недостаток вашей текущей модели данных: может быть несколько узлов, которые имеют правильный UID.Хотя ваше приложение может этого не разрешать, ваша модель данных делает это, и вы не можете применить уникальное значение UID через правила безопасности.

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

users: {
  "BD21...Wv33": {
    "email": "test2@test.com",
    ...
  }
}

Эта структура:

  • Вам гарантирован, что UID каждого пользователя может иметь местотолько один раз, поскольку ключи по определению уникальны в родительском узле.
  • Вы можете просто искать пользователя по его UID с помощью:

    var ref = firebase.database().ref('/users/').child(uid);
    ref.once('value', (snapshot) => {
      console.log(snapshot.key);
      snapshot.ref.child("fieldWhichYouWantToUpdate"].set("Field Value you want it to set to");
    })
    
0 голосов
/ 10 февраля 2019

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

updateUserInformation() {
  const uid = firebase.auth().currentUser.uid;
  var ref = firebase.database().ref('/users/').orderByChild('UID').equalTo(uid);
  ref.once('value', (snapshot) => {
    const updates = {};
    snapshot.forEach((child) => {
      const userKey = child.key;
      const userObject = child.val();
      updates[`${userKey}/fieldWhichYouWantToUpdate`] = `Field Value you want it to set to`;
      firebase.database().ref('/users/').update(updates);
    });
  })
}

Я не проверял это, но думаю, что это должно сработать.

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