【问题标题】:On creating a user adding an instance of that user to Firebase database? [duplicate]在创建用户时将该用户的实例添加到 Firebase 数据库? [复制]
【发布时间】:2017-02-18 23:55:57
【问题描述】:

这是任务。创建用户时,我想在主数据库中添加它们的一个实例,以便它们可以拥有与它们相关联的东西(列表和食谱)。我尝试做.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;
      });
    };
  }
]);

提前致谢!

******编辑**********

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我认为这是您链接的问题的副本。如果我这样关闭它,你可以吗(因为它会增加你其他/更长答案的权重)?
    • 好主意,我忘了将其标记为重复
    【解决方案2】:

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

    所以如果你做这样的事情,然后运行更新

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

    其中 userid 是您应该知道的某种唯一 id,可以是电子邮件或其他东西,因为您想再次查找该人,您需要使用此键。

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

    【讨论】:

    • 非常感谢!那效果很好。不再有奇怪的序列化键!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2018-04-28
    • 2020-03-10
    • 2020-07-30
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多