Firebase 删除的用户可以更改数据。如何在不修改应用程序代码的情况下解决此问题?

Ait*_*rDB 2 android firebase firebase-security firebase-authentication firebase-realtime-database

我正在使用 Firebase Auth 制作一个应用程序,但是当我删除或禁用一个帐户时,我需要手动创建一个 signOut()(我通过用户重新加载来控制它),如果我不这样做,用户可以继续上传数据。如何在没有应用程序代码的情况下解决此问题?

Firebase 规则

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid",
        ".write": "auth != null && auth.uid == $uid"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

应用程序代码 - 我如何检测它

if(user != null) user.reload().addOnCompleteListener(this, new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if(!task.isSuccessful()) {
                    String exc = task.getException().getMessage();
                    Log.e("FireBaseUser", exc);
                    auth.signOut();
                }
            }
});
Run Code Online (Sandbox Code Playgroud)

Fra*_*len 6

当令牌被铸造时,它会获得一个过期时间戳。这实质上是说:“此令牌中的信息在……之前一直有效”。删除用户不会使任何现有令牌无效。

请记住,自最新的Firebase 身份验证 SDK以来,令牌的有效期仅为一小时。所以最多一个小时后,令牌就会过期,被删除的用户将无法刷新它。

如果这对您的应用程序来说还不够,您可以向您的应用程序添加逻辑,在数据库中标记已删除的用户(在只有管理员可以访问的部分中):

/deletedUsers
  209103: true
  37370493: true
Run Code Online (Sandbox Code Playgroud)

然后,您可以在您的安全规则中验证只有未删除的用户才能访问数据:

".read": "!root.child('deletedUsers').child(auth.uid).exists()"
Run Code Online (Sandbox Code Playgroud)