Assume that you have the following rule on a Firebase Realtime Database:
terminal{ "rules": { "concurrent": { ".read": true, ".write": true, "$uid": { "connected": { ".validate": "newData.val().matches(/^foo/)" } } } } }
If users try to write new data that doesn't start with foo
, they'll get a permission error on data validation:
terminalError: PERMISSION_DENIED: Permission denied...
For example, assume that a user is pushing the following data:
javascriptpush(ref(db, 'concurrent'), { connected: 'bar' })
If you don't handle the error, you'll get a permission error on data validation. To prevent it, you could use then()
and catch()
methods because the push()
function returns a Promise:
javascriptpush(ref(db, 'concurrent'), { connected: 'bar' }) .then(val => { console.log('No errors') }) .catch(err => { console.log('Writing permission was denied') })
On functions that don't return a Promise, such as onValue()
, you can handle the error using the cancel callback function:
javascriptonValue(ref(db, 'concurrent'), snapshot => { console.log('No errors') }, error => { console.log('Writing permission was denied') })
Hi, I'm Erik, an engineer from Barcelona. If you like the post or have any comments, say hi.