Estamos tratando de escribir reglas para un google firebase realtimedb que solo permita a los usuarios leer y escribir en una ubicación que sea su propio UID cuando estén autenticados. Aquí están nuestras reglas actuales:
{ "rules": { "$uid": { ".write": "$uid === auth.uid", ".read": "$uid === auth.uid" } } }Y nuestra estructura DB:
{ "W48941DIDOIJ30" : { "subscription" : { "premium" : true }, "watchlist" : [] } }Cuando intentamos realizar una solicitud de obtención de la lista de observación o suscripción para un usuario autenticado con el mismo UID, nos encontramos con un error 401. ¿Lo que da?
Editar: aquí está nuestro método que llama a realtimeDB (estamos usando NUXT.js)
async getData () { const messageRef = this.$fire.database.ref(this.currentUser.uid) const idToken = await this.currentUser.uid // or this.currentUser.getIdToken() const response = await axios.get( messageRef.toString() + '.json', { headers: { Authorization: `Bearer ${idToken}` } } ) this.$store.commit('ON_WATCHLIST_CHANGE', response.data.watchlist) if (response.data.watchlist.companies.includes(this.$route.params.company) || response.data.watchlist.drugs.includes(this.$route.params.comound)) { this.$store.commit('CURRENT_PAGE_CHECK', true) } },Cuando realiza una llamada a la base de datos usando axios directamente, debe asegurarse de pasar también el token de identificación de su usuario:
async getData () { const messageRef = this.$fire.database.ref(this.currentUser.uid) const idToken = await this.$fire.auth.currentUser.getIdToken() // or this.currentUser.getIdToken() const response = await axios.get( messageRef.toString() + '.json', { headers: { 'Authorization': `Bearer ${idToken}` } } ) this.$store.commit('ON_WATCHLIST_CHANGE', response.data.watchlist) }Si omite el token, los servidores de Firebase lo considerarán un usuario anónimo.
También puede manejar esto usando un interceptor axios para agregar automáticamente el token de ID cada vez que se realiza una solicitud.
¿Puede probar esta estructura a continuación para sus reglas que también se menciona en este documento de Google y verificar si funciona?
{ "rules": { "users": { "$uid": { ".write": "$uid === auth.uid", ".read": "auth.uid == $uid" } } } }También puede consultar este hilo de stackoverflow que encontré, que podría ser útil.