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