gpt4 book ai didi

android - 当用户被禁用或删除时,Firebase 身份验证状态更改不会触发

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:22 24 4
gpt4 key购买 nike

引擎盖下

我在我的 Android 应用程序中使用 Firebase 身份验证 来注册/加入使用 Google、Facebook 和电子邮件/密码的用户。到目前为止,除了一个场景外,几乎一切正常。

场景

我有时需要从 Firebase 控制台禁用删除用户帐户以禁止某些用户使用我的应用。

在这种情况下,当我禁用或删除该特定用户时,该用户必须立即从该应用注销并且不能再使用它。

漏洞

我已使用 AuthStateListener 来监听身份验证状态更改,并在用户帐户被禁用或删除后立即自动注销用户。

FirebaseAuth.getInstance().addAuthStateListener(firebaseAuth -> {
if (firebaseAuth.getCurrentUser() == null) {
Intent intent = AuthFlowActivity.getCallingIntent(AuthFlowActivity.FORCE_LOGOUT);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
activityExitAnimation(BaseAppActivity.this);
}
});

但我从未见过 AuthStateListener 为这些操作触发任何事件。所以我无法立即注销用户,用户仍然可以继续使用该应用程序。

如果有人能帮助解决这个问题,我将不胜感激。

最佳答案

禁用或删除用户帐户不会触发身份验证状态更改。也不应该,用户仍然通过身份验证。最多一个小时后,Firebase 身份验证将尝试为用户刷新访问 token 。该刷新将失败,此时用户将变得未经身份验证并且将触发身份验证状态更改事件。

如果您希望立即撤销用户的授权,则必须在应用程序逻辑的另一部分执行此操作。一种常见的方法是在您的应用程序中加入黑名单,例如在Firebase Database :

/bannedUsers
uidOfBannedUser: true

现在,当您在 Autentication 面板中删除/禁用用户帐户时,您还会将他们的 uid 添加到数据库中的被禁止用户列表中。

然后可以通过在 database security rules 中添加一个子句来保护数据库免受未授权用户的访问。 ,例如

{
"rules": {
"bannedUsers": {
".read": true,
".write": false // only admins can write these
},
"messages": {
".read": "auth != null && !root.child('bannedUsers').child(auth.uid).exists()"
}
}
}

如果使用不同的后端,实现会有所不同。但是像这样的黑名单是禁止用户的常用方法。您会发现您甚至可能不太关心他们的身份验证,您只是禁止他们,而不是删除他们的凭据(他们可以简单地重新创建)。

关于android - 当用户被禁用或删除时,Firebase 身份验证状态更改不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38345085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com