如何在Firestore规则中实现禁用Firebase认证用户的访问限制?
解决方案:仅通过Firebase Auth与Firestore规则阻止禁用用户操作
1. 直接通过Firestore规则读取Auth禁用状态
完全可以实现,Firebase Auth的用户禁用状态会包含在请求的Auth令牌中,Firestore规则可直接访问request.auth.token.disabled字段判断用户是否被禁用。
修改你的isUserDisabled()函数如下:
function isUserDisabled() { return request.auth.token.disabled == true; }
2. 完整修改后的规则代码
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { function otentikasi(){ return request.auth != null; } function checkUid(docId){ return request.auth.uid == docId; } function isUserDisabled() { return request.auth.token.disabled == true; } match /backpack/{docId} { allow read: if otentikasi() && checkUid(docId) && !isUserDisabled(); allow update: if otentikasi() && checkUid(docId) && !isUserDisabled(); } }
3. 优化建议与注意事项
- 规则冗余简化:可以把重复的权限判断条件合并为一个通用函数,提升代码可读性:
之后的匹配规则可简化为:function isValidUser(docId) { return otentikasi() && checkUid(docId) && !isUserDisabled(); }match /backpack/{docId} { allow read, update: if isValidUser(docId); } - 令牌缓存延迟:用户的Auth令牌默认有效期为1小时,在Firebase Auth中禁用用户后,已持有有效令牌的用户仍能在令牌过期前访问Firestore。如果需要即时生效的禁用控制,还是需要结合
users集合存储用户状态(比如添加isDisabled字段),但这不符合你“仅依靠Firebase Auth和Firestore规则”的需求。
总结
仅依靠Firebase Auth和Firestore规则完全可以实现禁用用户的访问控制,核心是利用request.auth.token.disabled字段判断用户状态。若能接受1小时内的权限生效延迟,这就是最简洁的方案。
内容的提问来源于stack exchange,提问作者Alifa Al Farizi
相关产品推荐
相关产品推荐

