Android 如何在Firebase重新验证用户

Android 如何在Firebase重新验证用户,android,firebase,Android,Firebase,我正在尝试更新用户的电子邮件,但firebase需要最近登录才能更新,因此我尝试使用firebase文档中的方法,但问题是如何传递用户密码?我没有将密码保存在db中,而且我无法从firebase获取密码,因此我不知道如何传递密码 我认为解决方案是要求用户输入密码,因此我尝试使用一个字段输入密码,但仍然无效,因此如何将密码传递给firebase并重新验证用户以更改数据?您需要重新验证用户,请参阅 例如,您有一个用户键入密码的字段,假设它是EditTextetPassword,您在SharedRef

我正在尝试更新用户的电子邮件,但firebase需要最近登录才能更新,因此我尝试使用firebase文档中的方法,但问题是如何传递用户密码?我没有将密码保存在db中,而且我无法从firebase获取密码,因此我不知道如何传递密码


我认为解决方案是要求用户输入密码,因此我尝试使用一个字段输入密码,但仍然无效,因此如何将密码传递给firebase并重新验证用户以更改数据?

您需要重新验证用户,请参阅

例如,您有一个用户键入密码的字段,假设它是EditTextetPassword,您在SharedReferences中有用户电子邮件

因此,重新验证的代码如下所示:

AuthCredential credential = EmailAuthProvider
        .getCredential(SharedPreferences.getmail(),etPassword.getText().toString());

// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                Log.d(TAG, "User re-authenticated.");
               if(task.isSuccessful()){
                    updateUserEmail();
                 } else { 
                 // Password is incorrect 
                 }
            }
        });
AuthCredential凭据=EmailAuthProvider
.getCredential(SharedReferences.getmail(),etPassword.getText().toString());
//提示用户重新提供其登录凭据
用户重新验证(凭证)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
Log.d(标签“用户重新认证”);
if(task.issusccessful()){
updateUserEmail();
}否则{
//密码不正确
}
}
});
其中updateUserEmail()

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

user.updateEmail("user@example.com")
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if (task.isSuccessful()) {
                    Log.d(TAG, "User email address updated.");
                }
            }
        });
FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
user.updateMail(“user@example.com")
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Log.d(标记“用户电子邮件地址已更新”);
}
}
});

谢谢,你帮我节省了时间。用户在我的应用程序中键入他的电子邮件和密码,这不是安全漏洞吗?我可以在用户不知道的情况下将其发送到网络上