我的 Firebase 为每个用户保存了 4 个功能:姓名、电子邮件、密码和确认密码。 用户类别:
public class Users
{
String Username,Email,Password,ConfirmPassword;
public Users() {
}
public Users(String username, String email, String password, String confirmPassword) {
Username = username;
Email = email;
Password = password;
ConfirmPassword = confirmPassword;
}
public String getUsername() {
return Username;
}
public void setUsername(String username) {
Username = username;
}
public String getEmail() {
return Email;
}
public void setEmail(String email) {
Email = email;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
public String getConfirmPassword() {
return ConfirmPassword;
}
public void setConformPassword(String conformPassword) {
ConfirmPassword = conformPassword;
}
}
我保存的 Firebase 数据:
{
"user": {
"user22": {
"confirmPassword": "12345678",
"email": "[email protected]",
"password": "12345678",
"username": "user22"
}
}
}
在我的应用程序中,我可以选择将当前密码更改为新密码,它要求您输入以前的密码(Firebase 保存的当前密码),然后输入新密码(用户将有关密码的数据放在 UI 'EditText 上) ')。 看看这里它的样子:
然后用户必须单击“确认按钮”将旧密码更改为新密码。但是在更改之前,计算机需要检查旧密码是否与 Firebase 上保存的当前密码进行比较。I不知道该怎么做,请帮助我!!
我尝试执行该代码,但不确定是否可以获得我想要的变量的访问权限:
public void showUserName()
{
FirebaseDatabase Data= FirebaseDatabase.getInstance();
DatabaseReference myRef=Data.getReference("user");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
username.setText(snapshot.child("username").getValue(String.class));
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
即使上一个通道与当前通道没有比较,它也总是会改变..
要检查字段中的特定值,无需附加持久侦听器,只需执行 Query#get() 调用即可。
因此假设您有两个 EditText 对象:
EditText previousPasswordEditText = findViewById(R.id.previous_password_edit_text);
EditText newPasswordEditText = findViewById(new_password_edit_text);
要根据用户在
password
内输入的值检查数据库中存在的 previousPasswordEditText
字段的值,然后才使用在 newPasswordEditText
内输入的新密码执行更新,请使用以下代码行:
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = db.child("user").child("user22");
userRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
DataSnapshot userSnapshot = task.getResult();
String oldPassword = userSnapshot.child("password").getValue(String.class);
String previousPassword = previousPasswordEditText.getText().toString();
String newPassword = newPasswordEditText.getText().toString();
if (oldPassword.equals(previousPassword)) {
Map<String, Object> updatePassword = new HashMap<>();
updatePassword.put("password", newPassword);
userSnapshot.getRef().updateChildren(updatePassword).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> updateTask) {
if (updateTask.isSuccessful()) {
Log.d("TAG", "Update successful!");
} else {
Log.d("TAG", "Failed with: " + updateTask.getException().getMessage());
}
}
});
} else {
Log.d("TAG", "The oldPassword and the previousPassword don't match!");
}
}
}
});