出于以下几个原因,我正在将在应用程序中创建用户的过程转移到firebase函数,但遇到了一个问题:
我有一个/ users ref和/ usernames,在创建用户时,我将其信息保留在用户名和用户名中(可以公开访问以查看用户名是否可用)作为事务,以便在添加用户名时立即添加创建了一个用户,并且我的安全规则阻止了覆盖现有数据。
但是,使用Firebase函数会绕过这些安全规则,因此可能会有2个用户使用相同的用户名注册,而一个人的数据将被另一个人覆盖的情况
是否有一种方法可以防止从云功能覆盖现有数据? (理想情况下,不让他们通过安全规则)
答案 0 :(得分:1)
我遇到了类似的问题,发现最好的解决方案是使用firebase提供的交易方法。
假设您有用户名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
//
})