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

如何设置Firebase数据库规则仅允许已认证且未禁用账户写入数据

解决方案

要实现仅允许已认证且未被禁用的用户发送消息,需要两步:存储用户的禁用状态,然后在安全规则中验证该状态。

1. 先在Firestore中存储用户禁用状态

创建一个users集合,每个文档的ID使用用户的Firebase UID(和认证系统的UID一致),文档内添加一个布尔类型字段isDisabled:

  • 默认值设为false(表示账户正常)
  • 当需要禁用账户时,将该用户对应的isDisabled字段改为true

2. 修改Firestore安全规则

针对聊天应用的消息场景,建议给消息集合单独设置规则(假设消息存在messages集合下),避免全局开放权限。以下是调整后的规则:

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    // 全局读规则示例:允许所有已认证用户读取数据,可根据实际需求调整
    match /{document=**} {
      allow read: if request.auth != null;
    }

    // 消息集合写入规则:仅允许已认证且未被禁用的用户写入
    match /messages/{messageId} {
      allow write: if 
        request.auth != null && 
        !get(/databases/$(database)/documents/users/$(request.auth.uid)).data.isDisabled;
    }
  }
}

规则说明

  • request.auth != null:确保用户已完成身份认证
  • !get(...):查询当前用户在users集合中的状态文档,取反后表示账户未被禁用

你之前尝试的问题说明

  • 第一个规则是限制邮箱已验证且为Gmail账户,和账户禁用状态无关,不符合需求
  • 第二个规则的条件request.auth == auth.uid逻辑错误:request.auth是完整的认证对象,auth.uid是当前用户的UID,两者无法直接相等,正确的已认证判断应为request.auth.uid != null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:50:01