【问题标题】:Firebase Realtime Database Private Shared Data With E-Mail?Firebase 实时数据库私有共享数据与电子邮件?
【发布时间】:2019-12-29 07:17:26
【问题描述】:

我想在用户之间共享安全数据。

"shared_requests" : {
    "shared_uid" : {
      "deviceSeriNo" : "device1serino",
      "user1" : {
        "email" : "john@john.com",
        "userName" : "John"
      },
      "user2" : {
        "email" : "micheal@micheal.com",
        "userName" : "Micheal"
      }
    }
  }

规则:(已编辑,我忘了写一小部分。(auth.uid.email.replace('@','').replace('.','')) )

"shared_requests": {
        "$key": {
          ".read": "root.child('shared_requests').child($key).child('user1/email').val() == auth.uid.email.replace('@','_').replace('.','_') || root.child('shared_requests').child($key).child('user2/email').val() == auth.uid.email.replace('@','_').replace('.','_')",
          ".write": "root.child('shared_requests').child($key).child('user1/email').val() == auth.uid.email.replace('@','_').replace('.','_') || root.child('shared_requests').child($key).child('user2/email').val() == auth.uid.email.replace('@','_').replace('.','_')"
        }
      }

但不工作。我该如何解决这个问题?

编辑:

当我尝试使用 UID 时它可以工作。

"shared_req4": {
            "shared_uid": {
            "$key": {
              ".read":  "auth != null && auth.uid === $key",
                    ".write":  "auth != null && auth.uid === $key"
            }
          }
        }

数据:

模拟器:

模拟结果:

但是当我通过电子邮件尝试时它不起作用。

"shared_req3": {
            "shared_uid": {
            "$key": {
              ".read":  "auth != null && auth.uid.email.replace('@','_').replace('.','_') === $key",
                    ".write":  "auth != null && auth.uid === $key"
            }
          }
      }

数据:

模拟器:

模拟结果:

【问题讨论】:

  • 安全规则本身意义不大。你会根据这些规则运行什么代码?您期望从该代码中得到什么结果?你得到的结果是什么?请编辑您的问题以包含这些内容。
  • 您有机会将屏幕截图更新为英文吗?您可以临时覆盖控制台的语言,如下所示:stackoverflow.com/questions/43970866/…
  • @FrankvanPuffelen 我找到了一种适用于 UID 的方法。但我无法通过电子邮件运行此方法。
  • auth.uid.email 应该是什么?你的意思是auth.token.emailfirebase.google.com/docs/reference/security/database#authtoken
  • @FrankvanPuffelen 我试过 'auth.token.email' 但这是同样的错误。当我尝试“asd_asd_com”而不是“auth.token.email”时,它也有效。 “替换”会不会有问题?我们能看到函数返回了什么吗?

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


【解决方案1】:

问题解决了。

它在模拟器上不起作用,所以试试代码。它需要是 'auth.token.email' 而不是 'auth.uid.email'。

@FrankvanPuffelen 非常感谢。

【讨论】:

  • 它应该在模拟器上也能正常工作如果你为token.email提供一个值。
猜你喜欢
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 2019-11-19
  • 2018-12-25
  • 2019-05-16
相关资源
最近更新 更多