No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Firebase 5 para Web

Curso de Firebase 5 para Web

Juan Guillermo Gómez Torres

Juan Guillermo Gómez Torres

Reglas de seguridad para el almacenamiento

24/32
Recursos

Así como las reglas de seguridad de la base de datos en Firestore, el servicio de Firebase Storage nos permite limitar el acceso de los usuarios a ciertos archivos especiales de la aplicación. Todas las reglas de seguridad en cualquier servicio de Firebase se escriben de la misma manera.

En esta clase vamos a limitar la subida de archivos a usuarios autenticados y solo permitir el almacenamiento si los archivos son de tipo imagen u ocupan menos de 5 megas de almacenamiento:

match /imgPosts/{userId}/{imgId} {
        allow write: if request.resource.size < 5 * 1024 * 1024
                && request.resource.contentType.matches('image/.*')
                && request.auth.uid != null
                && request.auth.uid == userId
}

Aportes 12

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Sigo pensando que las reglas de seguridad de Google son lo mismo que escribir código backend jaja es como aprender un lenguaje de programación totalmente nuevo

Pero algo que no me gusta es que no puedes debuggear, por ejemplo, no me dejaba subir la imagen por falta de permisos, y quería ver cuál era la condición que estaba fallando, y no podía debuggear, al final la condición era el límite de peso ya que había escrito mal el .size

Buen dia companeros, segui el ejemplo de las reglas de firebase storage pero no me deja subir nada, aun estando auntenticado:

Estas son las reglas:

¿Porque en storage aunque las reglas estén definidas solo para usuarios autenticados, las imagenes de los post se siguen visualizando aunque este sin logearme?

Reto completado:

pd: no puedo creer que hayan pasado casi 5 años desde que se publico el curso y sea el primero en publicar la solucion del reto:

[usando version actual de firebase de junio 2023]

En el video anterior no logre subir nada al storage de firebase, en este pude luego de agregar las reglas mencionadas en el video y hacer este cambio en el código en postController.js

$('#btnUploadFile').on('change', e => {
    const user = firebase.auth().currentUser
    if(user == null){
      Materialize.toast(`Para crear el post debes estar autenticado`, 4000)
      return
    }else{
      const file = e.target.files[0]
      const post = new Post()
      post.subirImagenPost(file,user.uid)  
    }
  })
rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /imgsPosts/{allPaths=**} {
      allow read: if true;
    }
    match /imgsPosts/{userId}/{imgId} {
        allow write: if request.resource.size < 5 * 1024 * 1024
                && request.resource.contentType.matches('image/.*')
                && request.auth.uid != null
                && request.auth.uid == userId
		}
  }
}

¿Como puedo quitar el error de? :

has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.

Código para el reto. Debes agregar el id btnComentarios al botón enviar en el index.html: ```js <input id="btnComentarios" type="submit" class="waves-effect waves-light btn btnPpal" value="Enviar" /> ```postController.js ```js $('#btnComentarios').click(() => { // Validar que el usuario esta autenticado const user = firebase.auth().currentUser; if(user.uid === null){ Materialize.toast(`Para crear el post debes estar autenticado`, 4000); return; } const nombreContacto = $('#nombreContacto').val(); const emailContacto = $('#emailContacto').val(); const comentarioTipo = $('#comentarioTipo').prop('checked'); const reclamoTipo = $('#reclamoTipo').prop('checked'); const mejoraTipo = $('#mejoraTipo').prop('checked'); const otroTipo = $('#otroTipo').prop('checked'); const comentariosContacto = $('#comentariosContacto').val(); const post = new Post(); post.crearComentario( user.uid, user.email, nombreContacto, emailContacto, comentarioTipo, reclamoTipo, mejoraTipo, otroTipo, comentariosContacto ) }) ```post.js ```js crearComentario(uid, emailUser, nombreContacto, emailContacto, comentarioTipo, reclamoTipo, mejoraTipo, otroTipo, comentariosContacto) { return this.db .collection("comentarios") .add({ uid: uid, autor: emailUser, nombreContacto: nombreContacto, emailContacto: emailContacto, comentarioTipo: comentarioTipo, reclamoTipo: reclamoTipo, mejoraTipo: mejoraTipo, otroTipo: otroTipo, comentariosContacto: comentariosContacto, fecha: firebase.firestore.FieldValue.serverTimestamp(), }) .then((docRef) => { console.log("Comentario creado ID: ", docRef.id); Materialize.toast(`Comentario creado con exito por ${docRef.autor}`, 4000); }) .catch((error) => { Materialize.toast(`Error al crear el comentario ${error}`, 4000); }); } ```Reglas de seguridad: ```js rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /posts/{post} { allow read, write, update, delete: if request.auth.uid != null; allow list: if true; } match /posts/{post}/{uid} { allow update, delete: if request.auth.uid == uid && request.resource.data.email == resource.data.email; } match /comentarios/{comentario} { allow read, write, update, delete: if request.auth.uid != null; allow list: if true; } match /comentarios/{comentario}/{uid} { allow update, delete: if request.auth.uid == uid && request.resource.data.email == resource.data.email; } } } ```

Donde puedo aprendar mas de estas reglas? Quisiera hacer hacer una donde si el archivo ya se encuentra en la storage este no se pueda repetir

Esta debe ser las reglas para el storage, en lo que muestra el profesor esta con imgPosts, pero en el codigo que se realizo nosotros creamos como imgsPosts

rules_version = '2';
service firebase.storage {
  match /b/{bucket}/o {
    match /imgsPosts/{allPaths=**} {
      allow read: if true;
    }
    match /imgsPosts/{userId}/{imgId}{
    	allow write:if request.resource.size < 5 * 1024 * 1024
      			&& request.resource.contentType.matches('image/.*')
            && request.auth.uid != null
            && request.auth.uid == userId
    }
  }
}

Alguien seria amable de explicarme como determino 5 * 1024 * 1024 😕?