You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Authentication(邮箱&密码):解决禁用/删除用户仍登录问题

解决Firebase Auth控制台修改用户状态后客户端未同步的问题

Firebase Auth会在本地缓存用户会话,当你在控制台禁用或删除用户后,本地缓存不会自动同步服务端的状态变更。直接判断Firebase.auth.currentUser != null只能检测本地是否有缓存的用户记录,无法验证该用户在服务端的实际有效性,这就是问题的根源。

以下是两种正确的修改方案:

方法1:调用reload()同步用户最新状态

reload()会从服务端拉取用户的最新信息,之后再检查用户是否处于启用状态:

private fun checkLogged() {
    val currentUser = Firebase.auth.currentUser
    currentUser?.let { user ->
        user.reload()
            .addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    val refreshedUser = Firebase.auth.currentUser
                    // 验证用户是否存在且处于启用状态
                    if (refreshedUser != null && refreshedUser.isEnabled) {
                        startActivity(Intent(this@LoginActivity, MainActivity::class.java))
                        finish()
                    } else {
                        Firebase.auth.signOut()
                    }
                } else {
                    // 刷新失败,说明用户已失效
                    Firebase.auth.signOut()
                }
            }
    } ?: run {
        Firebase.auth.signOut()
    }
}

方法2:强制刷新ID Token验证有效性

调用getIdToken(true)强制从服务端获取新的Token,若用户已被禁用或删除,该方法会直接返回失败:

private fun checkLogged() {
    val currentUser = Firebase.auth.currentUser
    currentUser?.let { user ->
        user.getIdToken(true)
            .addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    // Token获取成功,用户状态有效
                    startActivity(Intent(this@LoginActivity, MainActivity::class.java))
                    finish()
                } else {
                    // Token获取失败,执行登出
                    Firebase.auth.signOut()
                }
            }
    } ?: run {
        Firebase.auth.signOut()
    }
}

注意事项

  • 这两个方法都是异步操作,必须在回调中处理结果,不能同步执行后立即判断状态。
  • 频繁调用会产生网络开销,建议只在启动页这类关键节点使用。

内容的提问来源于stack exchange,提问作者Mert Ozan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:35:10