• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

231
Views
Cómo diferenciar entre diferentes errores de permisos en Firestore

Estoy creando una aplicación con Firebase y uso el SDK de Javascript del lado del cliente para acceder a los datos de Firestore. Me encuentro con un problema: con mis reglas de Firestore, si un documento no se puede leer, no hay forma de determinar por qué no se pudo leer. Cualquier falla de las reglas para permitir que el documento se lea produce el mismo PERMISSION_DENIED: Missing or insufficient permissions .

Sin una forma de determinar por qué se denegó el acceso, no puedo presentar la forma correcta de obtener acceso al recurso en la interfaz de usuario, o decir qué salió mal (por ejemplo, debe iniciar sesión para usar este complemento, o debe comprar una suscripción para trabajar este widget) Viniendo de un fondo de nodo, he escrito una gran cantidad de código utilizando códigos de respuesta http como este (pseudocódigo):

 if (!doc) { // present a 'not found' message to the user return {status: 404} } else if (!req.user) { // present a log in/sign up dialog return {status: 401} } else if (req.user !== doc.owner) { // present a no-access message return {status: 403} } else { return {status: 200: body: doc} }

Aparte de escribir una capa del lado del servidor para manejar los permisos en lugar de usar firestore.rules, o crear una colección separada solo para manejar los permisos, que tendrían que mantenerse sincronizados manualmente y requerir el doble de lecturas, ¿hay alguna manera de escribir el reglas para poder diferenciar las diferentes razones del fracaso? Parece que si deny implementara una palabra clave de denegación, esto sería fácil:

 deny read 401: if !request.auth.uid deny read 403: if request.auth.uid !== resource.data.owner

Pero, por desgracia, no existe tal palabra clave deny .

almost 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Ese mensaje no se puede personalizar a partir de ahora. Una forma de evitar esto podría ser no realizar la solicitud como primer lugar si el usuario no ha iniciado sesión. Por ejemplo:

 if (getAuth().currentUser) { // fetch data } else { alert("Please login") }

Puede ser un poco desafiante para 401 y 403, pero si pudiera enumerar en qué casos puede haber un error 403, entonces definitivamente puede estructurar su código de esa manera.

Para 404, puede usar la propiedad .exists si se devuelve DocumentSnapshot

almost 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error