【发布时间】:2018-03-28 13:43:00
【问题描述】:
我正在尝试更新用户的电子邮件,但 firebase 需要最近登录,所以我尝试使用 firebase 文档中的方法,但问题是如何传递密码用户?我没有将密码保存在db中,我无法从firebase中获取它,所以我不知道如何传递密码。
我想到的解决方案是让用户输入密码,所以我尝试使用一个字段输入密码但它仍然不起作用,那么我怎样才能将密码传递给firebase并重新验证用户更改数据?
【问题讨论】:
我正在尝试更新用户的电子邮件,但 firebase 需要最近登录,所以我尝试使用 firebase 文档中的方法,但问题是如何传递密码用户?我没有将密码保存在db中,我无法从firebase中获取它,所以我不知道如何传递密码。
我想到的解决方案是让用户输入密码,所以我尝试使用一个字段输入密码但它仍然不起作用,那么我怎样才能将密码传递给firebase并重新验证用户更改数据?
【问题讨论】:
您需要重新认证用户,参考documentation。
例如,您有一个用户输入密码的字段,假设它是一个 EditText etPassword,并且您在 SharedPreferences 中有用户电子邮件
所以重新验证的代码如下所示:
AuthCredential credential = EmailAuthProvider
.getCredential(SharedPreferences.getmail(),etPassword.getText().toString());
// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.d(TAG, "User re-authenticated.");
if(task.isSuccessful()){
updateUserEmail();
} else {
// Password is incorrect
}
}
});
updateUserEmail() 是
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
user.updateEmail("user@example.com")
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User email address updated.");
}
}
});
【讨论】: