Android Firebase更新密码(当前密码和新密码)
我一直在为我的应用程序的更改密码功能而挣扎。我对如何比较当前通行证和通过firebase数据库存储新密码感到困惑。 请不要在评论上对我苛刻,请教育我。在询问之前,我先做了研究,并尝试了几次。我找到的大多数教程都是关于在listview中单击项目时更新数据的。我之所以使用db来存储用户,是因为我要创建两个键来标识用户是学生还是教授。我只是想问一下如何实现密码更改 ChangePassAccount.classAndroid Firebase更新密码(当前密码和新密码),android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我一直在为我的应用程序的更改密码功能而挣扎。我对如何比较当前通行证和通过firebase数据库存储新密码感到困惑。 请不要在评论上对我苛刻,请教育我。在询问之前,我先做了研究,并尝试了几次。我找到的大多数教程都是关于在listview中单击项目时更新数据的。我之所以使用db来存储用户,是因为我要创建两个键来标识用户是学生还是教授。我只是想问一下如何实现密码更改 ChangePassAccount.class public class ChangePassAccount extends App
public class ChangePassAccount extends AppCompatActivity {
Button btnSave;
EditText cpass, npass;
String pass, newpass;
DatabaseReference dbPDF;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_change_pass_account);
dbPDF = FirebaseDatabase.getInstance().getReference("users").child("password");
cpass = (EditText)findViewById(R.id.currentpass);
npass = (EditText)findViewById(R.id.newpass);
btnSave = (Button) findViewById(R.id.btnsave);
btnSave.setBackgroundResource(R.drawable.button);
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pass = cpass.getText().toString();
newpass = npass.getText().toString();
}
});
}
}
你会后悔的。这将为您提供当前值,然后将其与旧密码进行比较。如果它们匹配,则返回新密码
比如:
passwordRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
String password = mutableData.getValue(String.class);
if (password.equals(oldPassword) {
mutableData.setValue(newPassword);
return Transaction.success(mutableData);
}
}
@Override
public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
Log.d(TAG, "passwordTransaction:onComplete:" + databaseError);
}
});
这不是一个非常技术性的答案,但我最近在iOS中遇到了这个问题 可以找到名为“重新验证”的FirebaseAuth方法。这将获取您通过请求用户密码并从currentUser获取电子邮件创建的凭据。如果返回成功,您将知道密码是正确的。重新验证后,您可以使用新密码调用updatePassword 建议您不需要在数据库中单独存储密码,因为Firebase将为您处理所有这些
希望这有帮助,祝你好运 首先,您需要使用单值事件侦听器读取当前密码
pass = cpass.getText().toString();
newpass = npass.getText().toString();
dbPDF.addValueEventListener(addListenerForSingleValueEvent(){
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Post object and use the values to update the UI
String password = dataSnapshot.getValue(String.class);
if(password.equals(pass)){
dbPDF.setValue(newpass);
}else{
// show wrong pass dialog
}
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// ...
}
};
还要确保dbref是正确的
String username = "helpmepls";
dbPDF = FirebaseDatabase.getInstance().getReference("users").child(username).child("password");
我建议您使用来管理用户登录或更改密码等。。因此,您可能只需要通过以下方式存储用户数据:
这是用于更改用户密码的示例
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String newPassword = "SOME-SECURE-PASSWORD";
user.updatePassword(newPassword)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User password updated.");
}
}
});
FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
String newPassword=“SOME-SECURE-PASSWORD”;
user.updatePassword(新密码)
.addOnCompleteListener(新的OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
Log.d(标记“用户密码已更新”);
}
}
});
Sir@Frank你能告诉我密码是什么吗?此外,我还使用了2个编辑文本。passwordRef
是数据库中存储密码的位置的DatabaseReference
。这可能是您当前代码中的dbPDF
,但我不确定。我的密码假设您已经从两个TextView
s中获取了旧密码和新密码,并将它们分别保存在oldPassword
和newPassword
中。先生@Frank我想用新密码覆盖旧密码这就是该密码的作用,验证并更新密码。回答正确。投赞成票。我没有使用auth,先生,我只是将值传递到db中,并为pass创建子对象。哦,对不起,我做了一个假设。在这种情况下,@Frank的答案更合适。这将使我的工作变得困难,先生,我这样做是为了添加密钥以确定用户注册的类型。为什么要在数据库中存储用户密码?这是一种方法,但是Firebase具有Firebase auth,它将用作您的身份验证机制。如果您使用Firebase ui auth,则重置密码已由库解决,这会更好。Firebase ui是一个具有Firebase功能的ui绑定库,由Google正式支持