Firebase 删除的用户能够更改数据。如何在不修改应用程序代码的情况下解决此问题?
Firebase deleted user is able to change data. How can I fix this without modifying application code?
我正在制作一个带有 Firebase Auth 的应用程序,但是当我删除或禁用帐户时,我需要手动制作一个 signOut()(我通过用户重新加载来控制它),如果我不这样做,用户可以继续上传数据。我如何在没有应用程序代码的情况下解决这个问题?
Firebase 规则
{
"rules": {
"users": {
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
}
}
}
}
应用程序代码 - 我如何检测它
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();
}
}
});
铸造令牌时,它会获得一个到期时间戳。这实质上是说:"the information in this token is valid until ..."。删除用户不会使任何现有令牌失效。
请记住,自最新 Firebase Authentication SDKs 以来,令牌仅在一小时内有效。所以最多一个小时后,令牌就会过期,被删除的用户将无法刷新。
如果这对您的应用程序来说还不够,您可以在您的应用程序中添加逻辑来标记数据库中已删除的用户(在只有管理员可以访问的部分):
/deletedUsers
209103: true
37370493: true
然后您可以在 security rules 中验证只有未删除的用户才能访问数据:
".read": "!root.child('deletedUsers').child(auth.uid).exists()"
我正在制作一个带有 Firebase Auth 的应用程序,但是当我删除或禁用帐户时,我需要手动制作一个 signOut()(我通过用户重新加载来控制它),如果我不这样做,用户可以继续上传数据。我如何在没有应用程序代码的情况下解决这个问题?
Firebase 规则
{
"rules": {
"users": {
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
}
}
}
}
应用程序代码 - 我如何检测它
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();
}
}
});
铸造令牌时,它会获得一个到期时间戳。这实质上是说:"the information in this token is valid until ..."。删除用户不会使任何现有令牌失效。
请记住,自最新 Firebase Authentication SDKs 以来,令牌仅在一小时内有效。所以最多一个小时后,令牌就会过期,被删除的用户将无法刷新。
如果这对您的应用程序来说还不够,您可以在您的应用程序中添加逻辑来标记数据库中已删除的用户(在只有管理员可以访问的部分):
/deletedUsers
209103: true
37370493: true
然后您可以在 security rules 中验证只有未删除的用户才能访问数据:
".read": "!root.child('deletedUsers').child(auth.uid).exists()"