2017-05-30 4 views
2

Speicher Ich bin neu in Firebase und ich versuche, den Benutzer-Objekt (Benutzer E-Mail) an die Datenbank durch die .then() auf den firebase.auth().createUserWithEmailAndPassword(email, password)Firebase Daten nicht

zu speichern Wenn ich versuche, dies zu tun, wirft er einen Fehler:

Grundsätzlich gesagt, ich bin nicht berechtigt, die Benutzerdaten auf den Benutzerknoten festzulegen.

Ich weiß, die Funktion funktioniert, wenn, wenn ich die Sicherheitsregeln schreiben, um den Wert wahr userobj in der Datenbank erstellt wird.

Nicht sicher, was ich falsch mache.

controller.js

angular.module('app') 
    .controller('appCtrl', function($scope){ 

    //empty user object to store info 
    $scope.user = {}; 

    //empty object to accept user password 
    $scope.password = {}; 

    // add login event 
    $scope.signUp = function(){ 
     const email = $scope.user.email; 
     const password = $scope.password.setup; 

     // create new firebase user 
     firebase.auth().createUserWithEmailAndPassword(email, password) 
     // add user object to database 
     .then(function(){ 
      var userObj = $scope.user; 
      console.log($scope.user); 

      // set up database references 
      let database = firebase.database(); 
      let ref = database.ref(); 
      let usersRef = ref.child('users'); 

      // push user object to database 
      usersRef.push(userObj); 

     }) 
     .catch(function(error) { 
      // Handle Errors here. 
      var errorCode = error.code; 
      var errorMessage = error.message; 
      console.log(errorCode); 
      console.log(errorMessage); 
     }); 
    }; 

    firebase.auth().onAuthStateChanged(function(user) { 
     if (user) { 
     // User is signed in. 
     console.log('user signed in'); 
     var uid = user.uid; 
     console.log(uid); 
     } else { 
     // No user is signed in. 
     console.log('user not signed in'); 
     } 
    }); 

    }) 

Firebase Datenbank Regeln

"rules": { 
    "users": { 
    "$uid": { 
     ".read": true, 
     ".write": "(auth.uid === $uid)" 
    } 
    } 
} 
+0

offensichtlich können Sie die UID nicht übereinstimmen, bevor der Benutzer erstellt wird, also das ist der Fehler. aber die Regel für diese Daten einfach zu öffnen ist möglicherweise nicht sicher. Ich würde gerne die Antwort darauf sehen. Abstimmung –

Antwort

0

Problem ist, dass Sie .push(), verwenden, das Kind mit neuen UID erstellt. Sie sollten die neu erstellte Benutzer-UID abrufen und Ihr Objekt der zugehörigen Referenz zuweisen.

+0

funktioniert ... danke – user3911617