on Firestore and Storage events

on Firestore events

Run Cloud functions on database events. They are non-blocking: they run after writes. We use the term sanitization instead of validation, since they don't prevent writes.

sanitize data post-write

v2

export const onUserWritten = onDocumentWritten("users/{docId}", (event) => {
    const change = event.data
    const docId = event.params.docId

    const before = change.before.data()
    const after = change.after.data()
})

on Storage events

sanitize data post-upload

the user uploads a file to Firebase Storage. Sanitize data post-upload. For example:

exports.generateThumbnail = functions.storage.object().onFinalize(async (file) => {
    const fileBucket = file.bucket
    const filePath = file.name
    const contentType = file.contentType
    const metageneration = file.metageneration
    // Number of times metadata has been generated. New objects have a value of 1.
})

Create a thumbnail for an uploaded image.

earlymorning logo

© Antoine Weber 2026 - All rights reserved

on Firestore and Storage events

on Firestore events

Run Cloud functions on database events. They are non-blocking: they run after writes. We use the term sanitization instead of validation, since they don't prevent writes.

sanitize data post-write

v2

export const onUserWritten = onDocumentWritten("users/{docId}", (event) => {
    const change = event.data
    const docId = event.params.docId

    const before = change.before.data()
    const after = change.after.data()
})

on Storage events

sanitize data post-upload

the user uploads a file to Firebase Storage. Sanitize data post-upload. For example:

exports.generateThumbnail = functions.storage.object().onFinalize(async (file) => {
    const fileBucket = file.bucket
    const filePath = file.name
    const contentType = file.contentType
    const metageneration = file.metageneration
    // Number of times metadata has been generated. New objects have a value of 1.
})

Create a thumbnail for an uploaded image.