在创建用户时,将该用户的实例添加到Firebase数据库?

时间:2016-10-10 14:13:26

标签: angularjs firebase firebase-realtime-database firebase-authentication

这是任务。创建用户时,我想在主数据库中添加它们的实例,以便它们可以与它们相关联(列表和配方)。我尝试了.set().update(),虽然两者都在我的数据库中添加了用户的实例,但每次新用户注册时都会被覆盖。我怎么会不覆盖这些信息呢?我将根据我找到的信息继续搜索和更新我的帖子。这是我的身份验证码。

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

提前致谢!

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

好的,所以我得到了要添加的信息,但不是我预期的方式。我希望结构是这样的 用户 - - - ID - - - -信息 其中id是键,info是保存新对象的值。 我得到的是这...... a random serialized ID and then my user id and information object

现在的问题是,如何摆脱那个随机序列化密钥?

2 个答案:

答案 0 :(得分:1)

这里的问题是您直接写入用户节点,但您希望每个用户都拥有自己的节点。你可以通过写一个更深层次来解决这个问题:

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

您还可以查看我写的this answer,了解有关整个过程的详细信息。

答案 1 :(得分:1)

问题是您需要将每个用户放在密钥表单下。现在,您使用新数据更新users对象,然后覆盖它。这就是firebase的工作原理。

因此,如果您执行此类操作,请运行update

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

或者

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

如果用户ID是您应该知道的某种唯一ID,可能是电子邮件或其他内容,因为您想再次查找该人,您需要使用此密钥。

Firebase只是一个密钥路径存储,因此三者中的所有位置都可以作为URL访问