0

Я пытаюсь сохранить данные в моем usersRef в Firebase, но он хранится не с помощью ключа (userId).Firebase, хранящий данные до неверного идентификатора пользователя

После регистрации нового пользователя, я даю им определенную сумму кредитов .

addUser: function() { 
     firebase.auth().createUserWithEmailAndPassword(this.newuser.email, this.newuser.password).catch(function(error) { 
      // Handle Errors here. 
      var errorCode = error.code; 
      var errorMessage = error.message; 
      // ... 
     }); 
     console.log("adding user"); 
     try { 
      var user = firebase.auth().currentUser;  
      var userRef = database.ref('users/' + user.uid + '/'); 
      userRef.set({'credits': this.newuser.credits}); 
      if (user){ 
       this.logInShow = false; 
      } 
     } 
     catch(err){ 

     } 
    },   

В других пользователях могут развернуть предложения, которые должны храниться в тот же идентификатор пользователя, как и кредиты. Тем не менее, создается новый userID, и я остаюсь с одним userId, у которого есть свойство кредитов, и у кого есть предложение.

deployOffer: function(){ 
    try { 
     var user = firebase.auth().currentUser;  
     var userOffersRef = database.ref('users/' + user.uid + '/offers'); 
     offersRef.push(this.newoffer); 
     userOffersRef.push(this.newoffer); 
     this.offerShow = false; 
     this.post = false; 
    } catch (err){ 
     console.log(err); 
    } 
}, 

Как можно firebase.auth().currentUser.uid возвращаться разные ключи, когда я только зарегистрировал один? Вот что мой дб выглядит после регистрации, а затем разместить предложение:

enter image description here

ответ

1

У вас есть состояние гонки в вашем коде. Создание пользователя требует времени, так что это асинхронная операция. Но вы немедленно пишете начальные кредиты для пользователя, а это значит, что вы на самом деле пишете их ранее подписанному пользователю (перезаписывая свои существующие кредиты и предложения в этом процессе).

Решение состоит в том, чтобы написать начальные кредиты в завершение слушателя createUserWithEmailAndPassword:

addUser: function() { 
    firebase.auth().createUserWithEmailAndPassword(
     this.newuser.email, 
     this.newuser.password 
    ).then(function(user) { 
     console.log("adding user"); 
     var userRef = database.ref('users/' + user.uid + '/'); 
     userRef.set({'credits': this.newuser.credits}); 
     if (user){ 
      this.logInShow = false; 
     } 
    }).catch(function(error) { 
     // Handle Errors here. 
     var errorCode = error.code; 
     var errorMessage = error.message; 
     // ... 
    }); 
},  

 Смежные вопросы

  • Нет связанных вопросов^_^