这是任务。创建用户时,我想在主数据库中添加它们的实例,以便它们可以与它们相关联(列表和配方)。我尝试了.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
现在的问题是,如何摆脱那个随机序列化密钥?
答案 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访问