Presentación

Firebase Auth

Cloud Firestore

Cloud Storage

Cloud Functions

Curso Firebase para Web se encuentra en desarrollo. Vuelve pronto para encontrar nuevas lecciones.

  • Las reglas de seguridad de Cloud Storage son en esencia las mismas que utiliza Cloud Firestore.
  • Primero debemos (igual que hicimos con Cloud Firestore) cerrar todo al 100% para luego ir abriendo poco a poco y en base a nuestras condiciones.
match /{allPaths=**} {
    allow read, write: if false;
}
  • Ahora vamos a añadir una regla que, a través de un recursive wildcard pueda llegar a todos los paths en nuestro bucket de Cloud Storage y permitir leer unicamente si estás autentificado.
match /rooms/{roomID=**} {
    // Solo puedes leer y escribir si estás autentificado
    allow read: if request.auth != null;
}
  • Para poder escribir, además de estar autentificado lo que se escriba debe ser una imagen o un archivo de audio (y tener un peso determinado) En cuanto a este último si nos fijamos en alguno ya subido verás que no se interpreta como audio sino como "application/octet-stream", por lo que debemos usar metatados apropiados al subirlo.
let ext;
const metadata = {};
if (type === "photo") {
    ext = "jpg";
    metadata.contentType = "image/jpeg";
} else {
    ext = "wav";
    metadata.contentType = "audio/wav";
}
...
return storage.ref(fileName).put(file, metadata);
  • Y ajustamos nuestras reglas de seguridad.
// Solo puedes escribir si estás autentificado, pesa menos de 2MB y se trata de una imagen o archivo de audio
allow write: if request.auth != null
            && request.resource.size < 2 * 1024 * 1024
            && (request.resource.contentType.matches('image/jpeg')
                || request.resource.contentType.matches('audio/wav'))
  • Por último, para borrar archivos debemos comprobar que son del usuario conectado. Hay varias formas de hacerlo y si te estás preguntado si se puede acceder a otros servicios de Firebase (como Cloud Firestore, o Authentication) desde Cloud Storage la respuesta es no. Si esta fuera tu necesidad puedes crear un Custom Claim, algo que queda fuera del espectro de este curso.
match /{file} {
// Solo tú puedes borrar tus archivos
allow delete: if request.auth.uid in file.split('\\-');
}
  • Este es el aspecto final de nuestras reglas de seguridad Cloud Storage.
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {

  	// Todo cerrado
    match /{allPaths=**} {
      allow read, write: if false;
    }

    match /rooms/{roomID=**} {
        // Solo puedes leer y escribir si estás autentificado
        allow read: if request.auth != null;

        // Solo puedes escribir si estás autentificado, pesa menos de 2MB y se trata de una imagen o archivo de audio
        allow write: if request.auth != null
                        && request.resource.size < 2 * 1024 * 1024
                        && (request.resource.contentType.matches('image/jpeg') || request.resource.contentType.matches('audio/wav'))

      match /{file} {
        // Solo tú puedes borrar tus archivos
        allow delete: if request.auth.uid in file.split('\\-');
      }
    }
  }
}
Storyblok: el primer CMS headless tanto para desarrolladores como para marketers

El primer headless CMS tanto para desarrolladores como para marketers. Pruébalo gratis.

Código inicial
Aprende Firebase en Escuela Vue

¿Tienes alguna pregunta sobre esta lección de Curso Firebase para Web?

Resuelve todas tus dudas sobre Firebase en la Comunidad de Escuela Vue: un lugar donde participar, aprender y ayudar. ¡Te esperamos!.

Tras el registro (si no lo has hecho ya) serás redirigido/a al canal adecuado en la Comunidad.

Twitter

Sigue el día a día y todo lo relacionado con Escuela Vue a través de su cuenta de Twitter.

Discord

En la Comunidad de Escuela Vue podrás solucionar tus dudas y ayudar a otras personas como tú a solucionar las suyas.

Recibe novedades en tu 📬