【问题标题】:Firebase Security Rules permission deniedFirebase 安全规则权限被拒绝
【发布时间】:2016-06-13 11:07:50
【问题描述】:

我的 firebase 数据库是这样的:-

这些是我编写的安全规则,但是当我在模拟器中使用它们时,它们验证得很好,但是在代码中使用时,给出权限被拒绝错误

{
  "rules": {
    "jokes" : {
      "textjokes" : {
        ".read" : true,
        ".write": "auth != null"
  }
},
  "users": {
  "$uid": {
    ".write": "$uid == auth.uid"
  }
},
 "userslikelist": {
  "$uid": {
    ".write": "$uid == auth.uid"
  }
}
}

}

我得到错误:-

/userslikelist/qzCqJph6XcZbiIpbDKTTxwjRHrh1/-KK850oXwPnOvxan1xNG 失败:FirebaseError:权限被拒绝

/jokes/textjokes/MISC-0-01/likeCount 失败:FirebaseError:权限被拒绝

我的代码:-

Firebase ref = new Firebase("https://xxxxxxxxx.firebaseio.com/userslikelist/" + mAuth.getCurrentUser().getUid());
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                if(!likedMap.containsKey(postSnapshot.getKey())){
                    likedMap.put(postSnapshot.getKey(), postSnapshot.getValue(String.class));
                }
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

我不明白。我做错了什么?

更新代码:-

{
    "rules": {
        "jokes": {
            "textjokes": {
                ".read": true,
                ".write": "auth != null"
            }
        },
        "users": {
            "$uid": {
                ".write": "$uid == auth.uid"
            }
        },
        "userslikelist": {
            "$uid": {
                ".read": "$uid == auth.uid",
                ".write": "$uid == auth.uid"
            }
        }
    }
}

【问题讨论】:

    标签: android firebase-realtime-database firebase-security


    【解决方案1】:

    您没有授予对/userslikelist/userId 的读取权限,因此您将无法在您的onDataChange 上获得dataSnapshot

    确保在/userslikelist/userId 级别设置读取权限。

    {
      "rules": {
        "jokes" : {
          "textjokes" : {
            ".read" : true,
            ".write": "auth != null"
          }
        },
        "users": {
          "$uid": {
            ".write": "$uid == auth.uid"
          }
        },
        "userslikelist": {
          "$uid": {
            ".read": "$uid == auth.uid", //do whatever logic you need here
            ".write": "$uid == auth.uid"
          }
        } 
      }
    }
    

    【讨论】:

    • 我将 read = true 赋予“userslikelist”节点,但仍然没有。同样的错误
    • 请显示您更新的代码/规则,因为这绝对是一个错误。
    • @FrankvanPuffelen 更新了规则。请检查
    • 有了这些规则,第一次写入应该会成功。您可能可以通过在模拟器中运行它来找出它仍然失败的原因,您可以在控制台 > 数据库 > 规则 > 模拟器中找到它。
    • @FrankvanPuffelen 模拟器给了我成功的结果,但是当我在代码中运行时,错误来了
    【解决方案2】:

    对于遇到此问题的其他人。这里的问题是我正在使用旧的 firebase api 方法来设置值并从数据库中读取。我更改了更新方法以使用本示例中使用的新 google firebase 系统,现在我可以更新数据库了。

    https://github.com/firebase/quickstart-android/blob/master/database/app/src/main/java/com/google/firebase/quickstart/database/NewPostActivity.java#L39-L39

    【讨论】:

      猜你喜欢
      • 2016-11-27
      • 1970-01-01
      • 2020-03-22
      • 2020-08-16
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多