mfy316
mfy316

Reputation: 139

Prevent firebase function from overwriting existing data

I am moving the process of creating users in my application to a firebase function for a couple of reasons but I am running into an issue:

I have a /users ref and a /usernames, when a user is created I persist their info in users and usernames (which is publicly accessible to see if a username is available) as a transaction so the username is added immediately when a user is created and my security rules prevent overriding existing data.

However, with firebase functions these security rules are bypassed so there could be a case where 2 users signup with the same username and one person's data will be overriden by the other

is there a way to prevent overriding existing data from cloud functions? (ideally without having them go through the security rules)

Upvotes: 0

Views: 174

Answers (1)

moyou
moyou

Reputation: 96

I ran into a similar issue and the best solution i found was using the transaction method that firebase offers.

assuming you have a usernames ref you could do something like this:

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

Upvotes: 1

Related Questions