Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止firebase函数覆盖现有数据_Firebase_Firebase Realtime Database - Fatal编程技术网

防止firebase函数覆盖现有数据

防止firebase函数覆盖现有数据,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,出于几个原因,我将在应用程序中创建用户的过程转移到firebase函数,但我遇到了一个问题: 我有一个/users ref和一个/usernames,当创建一个用户时,我将他们的信息作为事务保存在users和usernames中(可以公开访问以查看用户名是否可用),这样在创建用户时立即添加用户名,并且我的安全规则防止覆盖现有数据 但是,使用firebase功能时,这些安全规则被忽略,因此可能会出现两个用户使用相同的用户名注册,而一个人的数据将被另一个人覆盖的情况 有没有办法防止覆盖云函数中的现有

出于几个原因,我将在应用程序中创建用户的过程转移到firebase函数,但我遇到了一个问题:

我有一个/users ref和一个/usernames,当创建一个用户时,我将他们的信息作为事务保存在users和usernames中(可以公开访问以查看用户名是否可用),这样在创建用户时立即添加用户名,并且我的安全规则防止覆盖现有数据

但是,使用firebase功能时,这些安全规则被忽略,因此可能会出现两个用户使用相同的用户名注册,而一个人的数据将被另一个人覆盖的情况


有没有办法防止覆盖云函数中的现有数据?(理想情况下不需要他们检查安全规则)

我遇到了类似的问题,我找到的最佳解决方案是使用firebase提供的事务方法

假设您有一个usernames ref,您可以这样做:

db.ref('usernames').child(theUsername).transaction(function (usernameInfo) {
    if (usernameInfo === null) {
        return {
            ...anObjectOfUserData // or could just return true
        }
    }

    // if the data is not null it means the username is used 
    // returning nothing makes the transaction do no updates
    return 
}, function (error, isComitted, snap) {
   //
   // Use isCommitted from the onComplete function to determine if data was commited 
   // DO NOT USE the onUpdate function to do this as it will almost certainly run a couple of times
   //
})