【问题标题】:Firebase RealTime Database Rules using regular expression for custom IDFirebase 实时数据库规则使用自定义 ID 的正则表达式
【发布时间】:2020-05-26 20:38:19
【问题描述】:

我有一个要求,用户只能写入他们在 RT 数据库中的帐户节点。通常这会起作用:

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

但是,要求是来自 Authentication 的 uid 存储在以“US_”为前缀的“accounts”中。

所以,我试过这个:

  "accounts": {
    "$uid": {
        ".write": $uid.matches(/^US_/) + "auth.uid",
        ".read": "$uid === auth.uid"
    },

还有这个:

  "accounts": {
    "$uid": {
        ".write": "$uid === /^US_/auth.uid",
        ".read": "$uid === auth.uid"
    },

第二个似乎更接近工作,错误是:

保存规则时出错 - 第 44 行:正则表达式后的标志无效

我想知道这是否可能?

更新

这解析正确,但似乎不起作用(我无法让规则通过):

  "accounts": {
    "$uid": {
        ".write": "$uid === 'US_' + 'auth.uid'",
        ".read": "$uid === auth.uid"
    },
  },

数据库结构

  accounts:
    uid: "US_blah",
    createdAt: <datetime>,
    username: "MickeyMouse"

【问题讨论】:

  • "Authentication 的 uid 存储在 "accounts" 中,前缀为 "US_" -> 你能展示一下你的数据库结构是如何与这个语句对应的吗?
  • @RenaudTarnec 添加到问题的末尾
  • 谢谢。可以肯定的是,username 是否与uid 处于同一级别?或者它是它的孩子之一?
  • @RenaudTarnec 感谢您的快速回复,但我设法弄清楚了:)

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


【解决方案1】:

事实证明我不需要正则表达式。这有效:

  "accounts": {
    "$uid": {
        ".write": "$uid === 'US_' + auth.uid",
        ".read": "$uid === auth.uid"
    },

【讨论】:

    猜你喜欢
    • 2016-07-22
    • 2020-05-28
    • 2017-10-28
    • 1970-01-01
    • 2021-01-31
    相关资源
    最近更新 更多