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('\\-');
      }
    }
  }
}
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 📬