拥有一个带有Coachs路径的DB。试图用规则来确保安全。因此,只有当他们的身份验证与用户登录时的身份验证相匹配时,才允许阅读下面的内容。如果我在规则操场上测试这个,它就会通过。
{
"rules": {
"Coaches": {
".indexOn": "coachEmail",
"$uid":{
".read": "$uid==auth.uid",
}
但在我的应用程序中,它不起作用,在logcat中获取错误侦听/Coaches失败:数据库错误:权限被拒绝问题可能是什么?查询数据库的代码中可能有错误?
//Query the database to get the current user
Query query = databaseReference.orderByChild("coachEmail").equalTo(user.getEmail());
query.addValueEventListener(new ValueEventListener() {
更新:
"rules": {
"Coaches": {
".indexOn": "coachEmail",
"$uid":{
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
这个通行证在规则操场
Type read
Location /Coaches/R6qhJIyLw9S6tI5llmuBhRvWWhn1
Data null
Auth { "provider": "anonymous", "uid": "R6qhJIyLw9S6tI5llmuBhRvWWhn1" }
Admin false
每当我运行我的应用程序时,我都会收到以下错误
Listen at /Coaches failed: DatabaseError: Permission denied
不确定可能是什么问题
安全规则不会以任何方式过滤您的数据。它们只是确保您的代码对数据库执行的任何操作都是根据您的规则允许的。
您的代码尝试加载/Coaches
,因此规则会检查用户是否具有对/Coaches
的读取权限。由于没有,读取操作被拒绝。
当前规则允许的唯一读取操作是:
databaseReference.child(user.getUid())...
由于您希望允许用户指定自己的电子邮件地址的查询,因此您也应该更新规则以检查此类查询。如关于安全查询数据的文档所示,这将类似于:
"Coaches": {
...
".read": "auth.uid != null &&
query.orderByChild == 'coachEmail' &&
query.equalTo == auth.token.email"
...
}