Android Firebase更新密码(当前密码和新密码)

Android Firebase更新密码(当前密码和新密码),android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我一直在为我的应用程序的更改密码功能而挣扎。我对如何比较当前通行证和通过firebase数据库存储新密码感到困惑。 请不要在评论上对我苛刻,请教育我。在询问之前,我先做了研究,并尝试了几次。我找到的大多数教程都是关于在listview中单击项目时更新数据的。我之所以使用db来存储用户,是因为我要创建两个键来标识用户是学生还是教授。我只是想问一下如何实现密码更改 ChangePassAccount.class public class ChangePassAccount extends App

我一直在为我的应用程序的更改密码功能而挣扎。我对如何比较当前通行证和通过firebase数据库存储新密码感到困惑。

请不要在评论上对我苛刻,请教育我。在询问之前,我先做了研究,并尝试了几次。我找到的大多数教程都是关于在listview中单击项目时更新数据的。我之所以使用db来存储用户,是因为我要创建两个键来标识用户是学生还是教授。我只是想问一下如何实现密码更改

ChangePassAccount.class

 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正式支持