如何更新电子邮件和更新密码 Firebase 身份验证

时间:2021-01-04 12:56:07

标签: android firebase-authentication

我想从实时数据库中的两个身份验证中更改电子邮件(当前用户)(用户的参考,以便他/她可以看到她的电子邮件)。我阅读了一些文档,但它需要密码,代码如下:

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

// Get auth credentials from the user for re-authentication
AuthCredential credential = EmailAuthProvider
        .getCredential("user@example.com", "password1234"); // Current Login Credentials \\
// 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.");
                //Now change your email address \\
                //----------------Code for Changing Email Address----------\\
                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.");
                                }
                            }
                        });
                //----------------------------------------------------------\\
            }
        });

无论如何,我如何获取 .getCredential 部分的密码,因为在电子邮件中我可以执行 user.getEmail() 但我不知道如何获取密码该帐户没有 user.getPassword() ; updatePassword 也是如此。我对如何做到这一点感到困惑。 顺便说一句,这是我的 updateEmail 和 updatePassowrd 代码。

编辑密码活动

saveEditProfile_studentbtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
        FirebaseUser studentUserEmail = firebaseAuth.getCurrentUser();
        String replaceUserMail = studentChangeMail.getText().toString().trim();

        studentUserEmail.updateEmail(replaceUserMail).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if(task.isSuccessful()){
                    FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
                    String studentUser = firebaseAuth.getCurrentUser().getUid();

                    final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users").child(studentUser);
                    String replaceName = studentChangeFullName.getText().toString().trim();
                    String replacePhoneNumber = studentChangePhoneNum.getText().toString().trim();
                    String replaceUserMail = studentChangeMail.getText().toString().trim();
                    Map<String, Object> updates = new HashMap<>();
                    updates.put("fullName", replaceName);
                    updates.put("phoneNumber", replacePhoneNumber);
                    updates.put("userEmail", replaceUserMail);

                    databaseReference.updateChildren(updates);
                    Toast.makeText(StudentProfileEditAct.this, "Changes has been made", Toast.LENGTH_SHORT).show();
                }
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(StudentProfileEditAct.this, e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });

    }
});

编辑密码活动

changepassword_savechanges.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if ( changeNewPassword.getText().toString().equals(changeReEnterNewPassword.getText().toString())){
            String newPassword = changeReEnterNewPassword.getText().toString().trim();
            FirebaseUser studentUser =  FirebaseAuth.getInstance().getCurrentUser();
            studentUser.updatePassword(newPassword).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if(task.isSuccessful()){
                        Toast.makeText(StudentEditPasswordAct.this, "Re-authenticated, Password has been changed.", Toast.LENGTH_LONG).show();
                        startActivity(new Intent(getApplicationContext(), WelcomeStudentActivity.class));
                    }

                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(StudentEditPasswordAct.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                }
            });
        }
        else {
            Toast.makeText(StudentEditPasswordAct.this, "Password does not match, please try again.", Toast.LENGTH_SHORT).show();
            changeNewPassword.setText("");
            changeReEnterNewPassword.setText("");
        }

    }
});

1 个答案:

答案 0 :(得分:0)

change the password of a user account,该用户必须最近登录 Firebase。如果该要求不存在,任何人都可以更改任何其他用户的密码,这将带来严重的安全风险。

因此,re-authenticating the user 文档中的逻辑是,当用户想要更改密码时,您要求用户再次输入其凭据,然后将这些凭据传递到 EmailAuthProvider.getCredential() 调用中。