首页 > 解决方案 > Firebase 实时数据库规则使用自定义 ID 的正则表达式

问题描述

我有一个要求,用户只能写入他们在 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"

标签: firebasefirebase-realtime-databasefirebase-security

解决方案


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

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

推荐阅读