无法从身份验证成功侦听器写入 Firebase 数据库



我使用的是Firebase auth(电子邮件和密码(和Firebase数据库。我正在尝试在成功注册后写入数据库。我使用的是Firebase助手提供的简单的数据库编写查询:

// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Hello, World!");

如果我只是在活动的onCreate方法下编写它,它确实有效,但当我在Auth成功侦听器中编写它时,帐户确实注册了,但消息没有写入数据库:

// [START sign_in_with_email]
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
// Write a message to the database
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("message");
myRef.setValue("Hello, World!");
FirebaseUser user = mAuth.getCurrentUser();
updateUI(user);
//rest of code 
}

在android中使用firebase数据库有一些步骤。

在Firebase控制台中启用电子邮件id和密码身份验证

注册来自代码的电子邮件和密码

在的帮助下

firebaseAuth.createUserWithEmailAndPassword(txt_email, txt_password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
assert firebaseUser != null;
String UserId = firebaseUser.getUid();

}

使用Hashmap设置Value。

并使用此代码登录

private void login(String txt_email, String txt_password) {
firebaseAuth.signInWithEmailAndPassword(txt_email,txt_password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if(task.isSuccessful()){
Intent intent = new Intent(SignIn.this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
hideProgressDialog();
startActivity(intent);
finish();
}
else{
String error = Objects.requireNonNull(task.getException()).getMessage();
hideProgressDialog();
Toast.makeText(SignIn.this, error, Toast.LENGTH_SHORT).show();
// Toast.makeText(SignIn.this, "Authentication Failed", Toast.LENGTH_SHORT).show();
}
}
});
}
public void showProgressDialog() {
if (mProgressDialog == null) {
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage(getString(R.string.loading));
mProgressDialog.setIndeterminate(true);
mProgressDialog.setCancelable(false);
}
mProgressDialog.show();
}
public void hideProgressDialog() {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.dismiss();
}
}

如果你有进一步的怀疑。请告诉我

当您未通过身份验证时,您的firebase规则似乎允许写入

步骤1:转到https://console.firebase.google.com/project/[项目名称]/数据库/[项目名称]/规则

步骤2:允许通过粘贴以下代码访问数据库

{
"rules": {
".read": true,
".write": true
}
}

步骤3:发布

该代码使您的数据库公开,不建议将其保留,并且您应该在完成测试和开发后对其进行保护。

最新更新