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
相关产品推荐
相关产品推荐

