You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Firebase规则阻止用户自定义新文档ID,强制使用SDK生成ID?

如何通过Firebase安全规则阻止自定义文档ID,强制使用SDK自动生成ID

要实现这个需求,核心是通过Firebase安全规则校验文档ID的格式——Firebase SDK的add()方法生成的自动ID是固定的20位大小写字母+数字组合,我们可以通过正则匹配来限制只有符合该格式的ID才能被创建。

具体安全规则写法

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      // 仅允许20位字母数字组成的ID创建文档
      allow create: if userId.matches('^[a-zA-Z0-9]{20}$');
      
      // 根据业务需求添加其他权限规则,比如读取、更新、删除
      allow read: if true; // 示例:允许所有读取,实际按需调整
      allow update, delete: if request.auth.uid == userId; // 示例:仅文档所有者可修改删除
    }
  }
}

规则说明

  • Firebase自动生成的文档ID严格符合^[a-zA-Z0-9]{20}$的正则格式,因此add()方法发起的创建请求会通过校验。
  • 用户手动指定的ID(比如CUSTOM_ID)如果不符合20位字母数字的要求,会被规则直接拒绝。
  • 极端情况下如果用户手动构造了一个符合格式的ID,理论上存在极小概率和自动生成ID冲突,但这种场景几乎不会影响业务,若需进一步限制可结合其他校验(比如关联用户UID,但这会改变业务逻辑)。

验证方式

  1. 用db.collection("users").add({foo: 1})测试:自动生成的ID符合规则,文档创建成功。
  2. 用db.collection("users").doc('CUSTOM_ID').set({foo: 1})测试:ID不符合格式,请求被安全规则拦截。

内容的提问来源于stack exchange,提问作者user2510058

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:10:50