Firebase应用技术求助:实现密码验证通过后才可修改DisplayName
解决Firebase已登录用户修改名称时密码验证无效的问题
嘿,我一眼就看出问题所在啦——你现在的代码里,不管密码验证成功与否,用户名称都会被修改!这是因为你把更新名称的逻辑直接放在了onComplete方法的外层,没有和密码验证的结果绑定起来。
问题根源
当前代码中,
user.updateProfile(profileUpdate)是在onComplete方法里直接执行的,不管task.isSuccessful()返回true还是false,这段更新名称的代码都会跑。所以哪怕弹出了“输入密码错误”的Toast,名称还是被改掉了。
修正后的代码
/** * Update Name Only */ private void updateDisplayNameOnly(){ showProgress(); AuthCredential credential = EmailAuthProvider .getCredential(FirebaseAuth.getInstance().getCurrentUser().getEmail(), mConfirm.getText().toString()); FirebaseAuth.getInstance().getCurrentUser().reauthenticate(credential) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { // 只有密码验证成功,才执行更新名称操作 FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); UserProfileChangeRequest profileUpdate = new UserProfileChangeRequest.Builder() .setDisplayName(mName.getText().toString()) //.setPhotoUri(Uri.parse("https://avatarfiles.alphacoders.com/862/86285.jpg")) .build(); user.updateProfile(profileUpdate) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { hideProgress(); if (task.isSuccessful()) { Log.d(TAG, "onComplete: User Profile updated"); Toast.makeText(getActivity(), "名称更新成功", Toast.LENGTH_SHORT).show(); // 这里可以处理重启APP或者刷新UI的逻辑 } else { Toast.makeText(getActivity(), "名称更新失败", Toast.LENGTH_SHORT).show(); } } }); } else { hideProgress(); // 密码验证失败,提示用户 Toast.makeText(getActivity(), "输入密码错误", Toast.LENGTH_SHORT).show(); } } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { hideProgress(); Toast.makeText(getActivity(), "验证失败:" + e.getMessage(), Toast.LENGTH_SHORT).show(); } }); }
关键修正点
- 核心逻辑绑定:把更新用户名称的代码移到
if (task.isSuccessful())的分支内部,确保只有密码验证通过后才会执行名称更新 - 优化提示信息:把验证失败的Toast改成更明确的“输入密码错误”,同时给
updateProfile也添加了监听,能单独处理名称更新本身的成功/失败情况 - 完善流程闭环:确保
hideProgress()在所有分支都能执行,避免加载框一直停留在界面上
内容的提问来源于stack exchange,提问作者user7838657
相关产品推荐
相关产品推荐

