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



我想将电子邮件(当前用户(从实时数据库的身份验证中更改(用户的引用,以便他/她可以查看她的电子邮件(。我读了一些文档,但它需要密码,下面是代码:

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("");
}
}
});

要更改用户帐户的密码,该用户必须最近登录了Firebase。如果该要求不存在,任何人都可以更改任何其他用户的密码,这将是一个严重的安全风险。

因此,文档中关于重新验证用户的逻辑是,当用户想要更改密码时,您要求用户再次输入凭据,然后将这些凭据传递到EmailAuthProvider.getCredential()调用中。

最新更新