我一直在努力改变我应用的更改密码功能。我对如何比较当前传递和通过firebase数据库存储新密码感到困惑。
请注意,请不要对我苛刻,请教育我。在做了几次询问和尝试之前,我先做了研究。我发现的大多数教程都是关于在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();
}
});
}
}
答案 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");