【问题标题】:Permission denied with Firebase权限被 Firebase 拒绝
【发布时间】:2017-12-26 06:59:37
【问题描述】:

我希望我的应用程序的用户有权查看通过实时数据库访问的其他用户的个人资料。我通过

引用 db

ref.once('users/'+uid, snapshot => snapshot.child('users/'+uid).val())

我的规则:

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

我不明白为什么我无法访问users/:uid,即使模拟器通过勾选read 并在<firebaseURL>/users 上运行模拟来提供success 消息。

如果我在rules 下设置".read": true",它确实允许我读取数据,但是如果我以后想要实现我不希望未经授权的用户使用的东西,那可能会诱使我。

编辑(解决方案):

问题在于引用 firebase。而不是firebase.database.ref('users'),我通过firebase.database.ref() 引用了root 本身。

该引用导致应用默认的read/write 规则。

【问题讨论】:

  • 我不确定您希望代码做什么。但是snapshot.child('users/'+uid).val() => snapshot.val() 似乎是第一个问题。
  • 我正在尝试读取单个用户的详细信息,这就是为什么我使用 snapshot.child('users/'+uid).val() 并且它确实有效,但是我设置的 rules 不允许我读取这些数据通过那个函数。
  • 你在 ".read: it should be ".read": true,
  • @Jay 确实是从内存中编写代码并错过了一个引用,很好,尽管这并不能解决为什么即使模拟成功我也无法读取数据的问题:\
  • 您能否详细说明此代码的预期内容 ref.once('users/'+uid, snapshot => snapshot.child('users/'+uid).val() )

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


【解决方案1】:

您可以给".read": "auth != null" 以允许所有授权用户读取users 对象下的数据,并防止未授权用户读取它。

【讨论】:

  • 问题是,我也希望允许未经授权的用户读取该数据。
  • 应该,但没有。这对我来说很奇怪。
  • "如果我在规则下设置 ".read": true" 它确实允许我读取数据,但是如果我以后想要实现我不想要的东西,那可能会诱使我可供未经授权的用户使用。”
  • 我认为可能是您的数据库查询错误。您想同时访问单个用户个人资料还是所有用户个人资料?
  • 您的查询正在尝试读取根快照,然后从中获取用户对象,它应该会失败,因为您没有授予根读取权限。
猜你喜欢
  • 2020-02-15
  • 2020-07-31
  • 2018-03-06
  • 2021-10-31
  • 2017-12-01
相关资源
最近更新 更多