【问题标题】:Realtime database firebase rules - denied permission实时数据库 Firebase 规则 - 拒绝权限
【发布时间】:2020-10-16 10:49:28
【问题描述】:

我有一个问题,我在各种网站或论坛上找到了信息,但找不到适合我的解决方案。

我在 firebase 中有这个实时数据库结构:

我想应用安全规则。 应用以下规则,只有经过正确身份验证的用户才能获取信息。

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

到目前为止,一切正常。从逻辑上讲,它表示任何经过身份验证的用户都可以访问任何信息

现在我希望经过身份验证的用户只能访问他们的节点。

根据我找到的信息,使用这些规则应该很容易:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

但是,我总是得到错误:

W / SyncTree: Listen at / failed: DatabaseError: Permission denied

这是由 android 代码建立的连接:

 database.addListenerForSingleValueEvent(object :
            ValueEventListener {
            override fun onDataChange(dataSnapshot: DataSnapshot) {

                val path = dataSnapshot.child(App.res.getString(R.string.word_user))
                    .child(prefs.user_id.toString()).child("expenses").children

                for (snapshot in path) {
...

我不明白问题出在哪里。

我知道请求是针对“费用”字段的,但是包含在“用户”字段中,我想应该没有问题。

正如我所说,我已经阅读了很多关于它的内容,但我无法让它发挥作用。

提前致谢

【问题讨论】:

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


    【解决方案1】:

    从错误消息看来,您正在将侦听器附加到数据库的根目录。当您尝试执行此操作时,Firebase 会检查您是否有权读取根目录。您的规则授予nobody 读取数据库根目录的权限,因此读取被拒绝。

    重要的是要认识到规则不会过滤数据,而只是强制对数据的所有访问都遵循规则。由于您只授予对/users/$uid 的访问权限,因此您只能将侦听器附加到/users/$uid 或更低级别。

    解决方案是将您现在在 onDataChange 内部进行的路径构建移动到其外部:

    database
      .child(App.res.getString(R.string.word_user))
      .child(prefs.user_id.toString())
      .child("expenses")
      .addListenerForSingleValueEvent(object : ValueEventListener {
        override fun onDataChange(dataSnapshot: DataSnapshot) {
            for (snapshot in dataSnapshot.children) {
                ...
    

    这不仅可以确保您的代码可以读取数据,而且还意味着它会尝试下载更少的数据(这可以为您和您的用户节省金钱和时间)。

    另见:

    【讨论】:

      猜你喜欢
      • 2020-12-29
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 2020-08-16
      • 1970-01-01
      • 2020-11-25
      • 2018-12-12
      相关资源
      最近更新 更多