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

Firebase用户删除身份验证失效,任意凭据均可删除账号求助

解决Firebase账号删除时忽略邮箱密码验证的问题

嘿,我一眼就瞅出问题所在了!你的代码里跳过了重新认证的结果校验——不管用户输入的邮箱密码对不对,你直接就执行了账号删除操作,这才导致任意输入甚至空值都能删账号的情况。

问题根源

你当前的逻辑是:调用user.reauthenticate(credential)之后,直接在它的addOnCompleteListener里执行user.delete(),完全没判断task.isSuccessful()。也就是说,哪怕重新认证失败(比如密码错误、邮箱不匹配),删除操作还是会被触发,完全起不到验证身份的作用。

修正后的完整代码

我们需要把删除操作放在重新认证成功的分支里,同时处理重新认证失败的场景,给用户明确的错误反馈:

final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
AuthCredential credential = EmailAuthProvider
        .getCredential(txtEmail.getText().toString().trim(), txtPassword.getText().toString().trim());

assert user != null;
user.reauthenticate(credential)
        .addOnCompleteListener(task -> {
            // 第一步:先检查重新认证是否成功
            if (task.isSuccessful()) {
                // 认证通过后,再执行账号删除操作
                user.delete()
                        .addOnCompleteListener(task1 -> {
                            progressDialog.dismiss();
                            if (task1.isSuccessful()) {
                                Toast.makeText(getActivity(), getResources().getString(R.string.delete_ok), Toast.LENGTH_SHORT).show();
                                final Handler handler = new Handler();
                                handler.postDelayed(() -> {
                                    Activity act = getActivity();
                                    if (act instanceof ActivityHome) {
                                        ((ActivityHome) act).onClose();
                                    }
                                }, 2000);
                            } else {
                                Toast.makeText(getActivity(), getResources().getString(R.string.delete_cancel), Toast.LENGTH_SHORT).show();
                            }
                        });
            } else {
                // 重新认证失败,提示用户输入错误
                progressDialog.dismiss();
                Toast.makeText(getActivity(), "邮箱或密码错误,请重新输入", Toast.LENGTH_SHORT).show();
                // 可选:获取具体错误信息做更精准提示
                // Log.e("DeleteAccount", "Reauthenticate failed", task.getException());
            }
        });

关键修改说明

  • 新增认证结果判断:只有当task.isSuccessful()为true时,才执行账号删除,确保只有本人能操作
  • 补充失败场景处理:给用户明确的错误反馈,避免误操作
  • 保留原有成功逻辑:只是把删除成功后的跳转、提示逻辑移到了正确的分支里

这样修改后,只有输入与当前登录账号匹配的正确邮箱和密码,才能完成身份验证并删除账号,完美解决你的问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:10:24