【发布时间】:2018-02-19 08:50:55
【问题描述】:
如果我直接从 Firebase 控制台删除用户,该用户在我的 Android 设备上仍有有效数据。
当然,如果我随后访问无法按预期工作的 firebase 资源(例如实时数据库)。
但这会导致客户端出现偏差,因为如果我有有效的用户数据,我会为经过身份验证的用户显示特定的 UI,而不是如果我没有经过身份验证的用户,我会显示另一个 UI。
我该如何应对这种情况?
编辑:我发现了什么,但我现在不知道,如果这没问题或者是一种解决方法是在我的 FirebaseUser 上调用 reload()。
根据文档,这应该会抛出异常,但这不会发生。发生的情况是我的用户引用变为空:
private void initializeUI(FirebaseUser user) {
user.reload();
if (null != user) {
mUser = user;
} else {
// User must have been disabled or deleted from console
}
我在这里调用initializeUI:
@Override
public void onAuthStateChanged(@NonNull final FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (null != user) {
initializeSignInUI(user);
} else {
initializeSignOutUI();
}
}
作为更多信息:
如果我打开我的应用程序,用户在客户端仍然活着。身份验证用户的触发器被触发,在这里,我可以使用上面的代码来管理这种情况。但我不知道这是否真的是一种解决方法或正确的做法。
编辑 2 只是为了重新提出我的问题:
这个方法效果很好:
public boolean validUser(FirebaseUser user) {
boolean validUser = false;
if (null != user) {
try {
user.reload();
if (null != user) {
validUser = true;
}
} catch (Exception e) {
//} catch (FirebaseAuthInvalidUserException e) {
validUser = false;
}
}
return validUser;
}
我可以认为这是一个有效的解决方案还是有其他最佳做法?此解决方案仅适用于 FirebaseAuth,无需与 FirebaseDatabase 交互。 我可以在每次必须检查用户身份验证时调用此方法。
【问题讨论】:
-
数据库中有用户节点吗?
-
登录后(用户在 Auth 部分创建)我在我的数据库上创建了一个用户节点,是的。但是当我从控制台中删除时,我有一个触发器可以清理我的数据库。
-
@AL。我的情况完全不同。我已经编辑了我的答案以更好地解释这个场景。如果我的设备中有一个已经过身份验证的用户,并且我从控制台中将其删除,那么我在这里要问的不是如何保护我的数据库免受他/她的侵害,而是我要检查它是否已被删除以更新我的 UI 和辅助更新我的环境以防止用户通过身份验证。
-
@AL。所以我认为这不是重复的。我要求更多。
标签: java android firebase firebase-realtime-database firebase-authentication