我正在使用React-Native和Firebase构建应用程序。
在另一个应用程序中工作的代码(从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"
}
}
}
}
以下是我的动作创建者:
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中的一些,其中许多包含此行为的解决方法。