Yo uso firebase 8.10.0 white Vue Js.
Solo uso Google como proveedor para la autenticación y quiero que el usuario solo lea sus datos, así que uso firestore rules
:
mis reglas:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{id} { allow read: if request.auth.uid == id; } } }
y así es como obtengo los datos:
... let ref = firebase.firestore().collection("users"); // .where("__name__", "==", uid) or ref.doc(uid).get().then((doc) => { this.data = [{id: doc.id}]; }) // working well ref.get().then((doc) => { doc.forEach((doc) => { this.data.push({ id: doc.id }); }); }) // err: Uncaught (in promise) FirebaseError: Missing or insufficient permissions. ...
¿Puedo hacer esto y? ¿Cómo puedo arreglar eso? : culpa mía :')
Está intentando consultar las colecciones completas de los users
, pero sus reglas de seguridad permiten que un usuario lea un documento con el UID del usuario como ID de documento. Las reglas de seguridad no filtran los documentos, por lo que si solo intenta obtener el documento del usuario actual, intente usar get()
en una DocumentReference :
// add .doc(<userId>) let ref = firebase.firestore().collection("users").doc(currentUserId); ref.get().then((doc) => { this.data = [{id: doc.id}]; })