0

Ich versuche, Daten zu einem meiner usersRef in Firebase zu speichern, aber es wird mit dem falschen Schlüssel (userId) gespeichert.Firebase speichert Daten zu falscher Benutzer-ID

Nach der Registrierung eines neuen Benutzers gebe ich ihnen eine bestimmte Anzahl von Credits.

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){ 

     } 
    },   

In anderen Ländern können Benutzer bereitstellen Angebote, die als Kredite an die gleichen Benutzer-ID gespeichert werden sollen. Es wird jedoch eine neue Benutzer-ID erstellt, und mir bleibt eine userId mit einer credits-Eigenschaft und einer mit einem Angebot.

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); 
    } 
}, 

Wie konnte firebase.auth().currentUser.uid verschiedene Schlüssel zurückkehren, wenn ich nur ein registriert habe? Hier ist, was meine db sieht aus wie nach der Registrierung und dann Buchung ein Angebot:

enter image description here

Antwort

1

Sie haben eine Race-Bedingung in Ihrem Code. Das Erstellen eines Benutzers benötigt Zeit, ebenso eine asynchrone Operation. Aber Sie schreiben sofort die Startkredite für den Benutzer, was bedeutet, dass Sie sie tatsächlich an den zuvor angemeldeten Benutzer schreiben (indem sie ihre vorhandenen Credits und Angebote überschreiben).

Die Lösung ist die anfänglichen Credits in der Fertigstellung des Zuhörer createUserWithEmailAndPassword zu schreiben:

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; 
     // ... 
    }); 
},  
Verwandte Themen