如何设置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
相关产品推荐
相关产品推荐

