0

我正在使用React-Native和Firebase构建应用程序。无法访问Firebase数据库(尽管读取规则为true)

在另一个应用程序中工作的代码(从firebase中拉出)未能正常工作。所以,我修改了它要简单 - 一个时间数据呼叫,我得到以下错误:

Possible Unhandled Promise Rejection (id: 0): 
Error: permission_denied at /userList: Client doesn't have permission to access the desired data. 

即使我制定规则“真”(对所有人开放),我仍然得到同样的错误。在同一个应用程序的其他地方,我还有其他的读/写功能可以工作。

这里是我的现行规则和数据库结构:

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid" 
     } 
    }, 
    "public": { 
     "$uid": { 
     ".read": "auth != null", 
     ".write": "auth != null" 
     } 
    }, 
    "feedback": { 
     "$uid": { 
     ".read": "auth != null", 
     ".write": "auth != null" 
     } 
    }, 
    "userList": { 
    "$uid": { 
     ".read": "auth != null", 
     ".write": "auth != null" 
    } 
    } 
    } 
} 

Database Structure

这里是我的行动的创建者,使召唤:

import firebase from 'firebase'; 

export const NAMES_FETCH = 'names_fetch' 
export const namesFetch =() => { 

    return (dispatch) => { 
     firebase.database().ref(`/userList`).once('value').then(function(snapshot) { 
     var names = snapshot.val(); 
     console.log('FIREBASE PRINT', names) 
     }); 

    }; 
    }; 

我已经竭尽所能,和我在我的智慧结束。谢谢!

+0

忘了提,如果我改变裁判非常相同的代码工作“用户”而不是“用户列表” –

回答

0

当您附加侦听器时,Firebase会检查读取权限。如果您有读取该位置的权限,则允许读取或查询。如果您对位置没有读取权限,则读取或查询将被拒绝。

在您的情况下,读取被拒绝,因为没有人拥有对/userList的读取权限。

因此:要查询一个位置,您必须具有该位置的读取权限。一旦您拥有某个位置的读取权限,您还可以读取该位置下的所有数据(docs。这意味着查询不能用于过滤您无权访问的数据,Firebase文档将其称为rules are not filters.

也看到一些其他许多questions about this topic的,其中许多包含变通办法此行为。

+0

谢谢你你的快速回答!只有一个后续:为什么没有人读取权限/ userList?我认为这是我的规则允许在userList下。最简单的解决办法是给所有读取权限,但从你的答案我猜THI打破规则是不是过滤器指导?谢谢 –

+0

我看到我的错误。谢谢您的回答! –