Firebase更新密码(当前通行证和新通行证)

时间:2017-09-14 03:33:15

标签: android firebase firebase-realtime-database

我一直在努力改变我应用的更改密码功能。我对如何比较当前传递和通过firebase数据库存储新密码感到困惑。 This is my firebasedb structure my xml form

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

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


            }
        });

    }
}

4 个答案:

答案 0 :(得分:3)

我建议您使用firebase auth来管理用户登录或更改密码等。所以,您可能只需按UserInfo

存储用户数据

这是Firebase-Manage User更改用户密码的示例

<?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <appSettings>
       <add key="Raven/Esent/CacheSizeMax" value="512" />

答案 1 :(得分:2)

这不是一个非常技术性的答案,但我最近在iOS中遇到了这个问题。

可以找到名为“reauthenticate”的FirebaseAuth方法here。这将通过询问用户的密码并从currentUser获取电子邮件来获取您创建的凭据。如果返回成功,您将知道密码是否正确。重新验证后,您可以使用新密码调用updatePassword。

作为建议,您不需要将密码单独存储在数据库中,因为Firebase将为您处理所有这些。

希望这会有所帮助,祝你好运!

答案 2 :(得分:1)

use a Firebase Database transaction就此而言。这将为您提供当前值,然后将其与旧密码进行比较。如果匹配,则返回新密码。

类似的东西:

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

答案 3 :(得分:0)

首先,您需要使用单值事件侦听器

读取当前密码
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");