如果您的用户已登录,则在您的应用程序中,并且您正在从Firebase控制台中手动删除它,该用户将保持活动状态,直到刷新令牌为止。因此,最多大约一个小时,用户将保持身份验证。因此,如果您想立即限制用户的访问权限,则需要注销该用户。
但是还有另一种解决方法,您可以在Firebase数据库中创建一个名为的新节点,然后在其中
usersToLogOut添加所有用户ID
keys和将布尔值
true作为值。数据库应如下所示:
Firebase-root | --- usersToLogOut | --- uid1: true | --- uid2: true
下一步,当您手动删除该帐户时,需要在该节点下添加用户的uid。您还需要使用Firebase安全规则来撤消未经授权的用户的访问。规则应如下所示:
{ "rules": { "usersToLogOut": { ".read": true, ".write": false }, "posts": { ".read": "auth != null && !root.child('usersToLogOut').child(auth.uid).exists()" } }}编辑1:
根据您的编辑,您说:
what I'm asking here is not how to secure my DB from him/her but Ito check that It has beendeleted但这是使用上述规则的一种更简单的方法来实现此目标。如果您从控制台手动删除用户,这并不意味着您要删除所有内容,包括数据库记录。您需要自己做。因此,最简单的方法是使用规则。
此外,如果删除所有用户记录,则可以添加一个侦听器并强制其注销,但这意味着您需要在数据库中搜索所有记录并相应地删除它们。第一种解决方案比较容易,因为您只需要在数据库中添加一条记录即可。
编辑2:
当您手动删除用户时,这并不意味着该
firebaseUser对象将是
null,因此检查是否为空没有任何意义,因为在下一次令牌刷新之前,用户仍将通过身份验证。因此,要解决此问题,您需要使用Firebase规则来限制访问。
因此,您的代码将始终有效。我要说的是,在您从控制台中手动删除用户的时间到您刷新令牌的时间之间,最多可能需要一个小时,用户仍然可以访问您的应用,即使他被删除了。要停止此操作,请在该小时内使用上述解决方案。
根据OP的评论编辑:
您的代码可以正常工作,并且始终可以工作,但是问题是,即使您从控制台删除用户,在下一次刷新令牌之前,他仍将具有数据库访问权限。是的,用户将能够访问数据库。该令牌的有效期约为一个小时,如果您不希望使用该令牌,则可以限制使用安全规则,并且在该小时内该用户不再具有访问权限。
换句话说,如果您也从客户端将其删除,并且它是无效的,并且如果其他人已经“被盗”,则该令牌可以使用它来访问数据库。不是正在使用您的应用的用户,而是可能会窃取该令牌的用户。



