0

Hier ist die Aufgabe. Wenn ein Benutzer erstellt wird, möchte ich eine Instanz von ihnen in der Hauptdatenbank hinzufügen, damit ihnen dann Dinge zugeordnet werden können (Listen und Rezepte). Ich versuchte, .set() und .update() zu tun, und während beide eine Instanz des Benutzers in meiner DB hinzufügten, würde es jedes Mal überschrieben, wenn ein neuer Benutzer sich registrierte. Wie würde ich vorgehen, dass diese Informationen nicht überschrieben werden? Ich werde weiter suchen und meinen Beitrag basierend auf den Informationen, die ich gefunden habe, aktualisieren. Hier ist der Auth-Code, den ich habe.Beim Erstellen eines Benutzers, der eine Instanz dieses Benutzers zur Firebase-Datenbank hinzufügt?

app.controller("SampleCtrl", ["$scope", "Auth", 
    function($scope, Auth) { 
    $scope.auth = Auth; 

    $scope.createUser = function() { 
     $scope.message = null; 
     $scope.error = null; 

     // Create a new user 
     Auth.$createUserWithEmailAndPassword($scope.email, $scope.password, $scope.name) 
     .then(function(firebaseUser) { 
      $scope.message = "User created with uid: " + firebaseUser.uid; 
      const uid = firebaseUser.uid; 
      const dbref = firebase.database().ref().child('users'); 
      dbref.update({ 
      id: uid, 
      name: $scope.name 
      }); 
      console.log(dbref.uid); 
     }).catch(function(error) { 
      $scope.error = error; 
     }); 
    }; 

    $scope.deleteUser = function() { 
     $scope.message = null; 
     $scope.error = null; 

     $scope.auth.$onAuthStateChanged(function(firebaseUser) { 
     $scope.firebaseUser = firebaseUser; 
    }); 

     // Delete the currently signed-in user 
     Auth.$deleteUser().then(function() { 
     $scope.message = "User deleted"; 
     }).catch(function(error) { 
     $scope.error = error; 
     }); 
    }; 
    } 
]); 

Vielen Dank im Voraus!

****** EDIT **********

Okay, so habe ich Informationen hinzugefügt werden, aber nicht in der Art, wie ich erwartet hatte. Ich möchte die Struktur so sein Benutzer ----- ID ------- info Wo ID ist der Schlüssel und Info ist der Wert, der ein neues Objekt enthält. Was ich immer das ist ... a random serialized ID and then my user id and information object

Die Frage ist nun, wie kann ich diese Zufall serialisierten Schlüssel los?

Antwort

1

Das Problem hier ist, dass Sie direkt an den Knoten Benutzer schreiben, aber Sie möchten, dass jeder Benutzer seinen eigenen Knoten hat. Sie können dieses Problem beheben, indem eine Ebene tiefer wie diese schreiben:

const dbref = firebase.database().ref().child('users').child(uid); 
dbref.update({ 
    name: $scope.name 
}); 

Sie auch einen Blick auf this answer i um weitere Informationen zu diesem gesamten Prozess rund um geschrieben nehmen.

+1

ich dies ein Duplikat der Frage, die Sie verknüpfen betrachte zugegriffen werden. Bist du in Ordnung, wenn ich es als solches schließe (wie es das Gewicht deiner anderen/längeren Antwort erhöht)? –

+0

Gute Idee, ich habe vergessen, es als Duplikat zu markieren –

1

Das Problem ist, dass Sie jeden Benutzer unter einem Formular für den Schlüssel setzen müssen. Jetzt aktualisieren Sie das Benutzerobjekt mit neuen Daten und überschreiben es dann. So funktioniert Firebase.

Also, wenn Sie etwas tun, dann aktualisieren laufen

const dbref = firebase.database().ref().child('users').child(userid); 
dbref.update({ 
    name: $scope.name 
}); 

Oder

const dbref = firebase.database().ref('users/'+userid); 
dbref.update({ 
    name: $scope.name 
}); 

Wo userid eine Art eindeutige ID ist Sie wissen, sie stellen eine E-Mail oder etwas sein könnte Da Sie diese Person erneut suchen möchten, müssen Sie diesen Schlüssel verwenden.

Firebase ist nur ein Schlüsselpfad zu speichern, so dass alle Standorte in den drei können als URLs

+0

Vielen Dank! Das hat sehr gut funktioniert. Keine komischen serialisierten Schlüssel mehr! –

Verwandte Themen