【问题标题】:Realtime database rules issues实时数据库规则问题
【发布时间】:2020-08-21 12:37:48
【问题描述】:

拥有一个带有教练路径的数据库。试图用规则来保护。因此,只有当他们的身份验证与登录时所用的用户匹配时,才允许阅读下面的内容。如果我在规则操场上测试它,它就会通过。

 {
      "rules": {
        "Coaches": {
          ".indexOn": "coachEmail",
            "$uid":{
               ".read": "$uid==auth.uid",
            }

但在我的应用程序中它不起作用在 logcat 中得到错误 听 /Coaches 失败:DatabaseError: Permission denied 问题可能是什么?可能是查询数据库的代码出错了?

//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

不确定是什么问题

【问题讨论】:

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


    【解决方案1】:

    Security rules do not filter your data 无论如何。它们只是确保您的代码对数据库执行的任何操作都符合您的规则。

    您的代码尝试加载/Coaches,因此规则会检查用户是否对/Coaches 具有读取权限。因为他们不这样做,所以读取操作被拒绝。

    当前规则允许的唯一读取操作是:

    databaseReference.child(user.getUid())...
    

    由于您希望允许用户指定自己的电子邮件地址的查询,因此您也应该更新规则以检查此类查询。如securely querying data 上的文档所示,类似于:

    "Coaches": {
      ...
      ".read": "auth.uid != null &&
                query.orderByChild == 'coachEmail' &&
                query.equalTo == auth.token.email"
      ...
    }
    

    【讨论】:

    • 老实说,我很乐意实施这个“规则”:{“Coaches”:{“$uid”:{“.write”:“$uid === auth.uid”这个在规则操场上工作,在我的应用程序的 logcat 中,它说权限被拒绝。每个教练都存储在 uid 下,所以我不知道问题出在哪里,上面的问题是试图找到解决它的方法。任何时候我使用通配符值它都会拒绝许可,即使我在 $uid 下做了 true 和 true 跨度>
    • 我的回答的前半部分描述了为什么您的查询不起作用,以及如何加载用户(基于他们的 UID 没有查询)。后半部分描述了如何使对电子邮件地址的查询安全地工作。不过,我不确定您在评论中要问什么,所以不知道如何进一步提供帮助。
    • 我非常感谢一些帮助,因为我有一个项目将于下周到期,并且很难实现它。我已经阅读了负载并观看了视频,但看不出它为什么不起作用
    • 再次:我的回答的前半部分描述了为什么您的查询不起作用,以及如何加载用户(基于他们的 UID 没有查询)。后半部分描述了如何使对电子邮件地址的查询安全地工作。您是否尝试过我的答案中的任何一个?
    • 是的,我尝试了第二部分,但它仍然在日志中说权限被拒绝
    猜你喜欢
    • 2018-08-27
    • 2021-01-14
    • 2021-12-28
    • 2021-06-20
    • 2018-04-16
    • 2021-01-31
    相关资源
    最近更新 更多