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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:32:08