无法从Auth成功监听器写入Firebase数据库

时间:2018-11-27 11:23:37

标签: android firebase firebase-realtime-database firebase-authentication

我正在使用Firebase身份验证(电子邮件和密码)和Firebase数据库。 成功注册后,我试图写入数据库。 我正在使用Firebase助手提供的简单的数据库编写查询:

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

如果我仅通过活动的onCreate方法编写它,它就可以工作,但是当我在Auth成功侦听器中编写它时,该帐户会注册,但是消息不会写入数据库: / p>

// [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 
}

2 个答案:

答案 0 :(得分:0)

有一些步骤可以在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();
    }
}

如果您还有其他疑问。请让我知道

答案 1 :(得分:0)

您的Firebase规则似乎在未经身份验证时允许写入

第1步:转到https://console.firebase.google.com/project/[projectname]/database/[projectname]/rules

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

{

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

第3步:发布

该代码使您的数据库公开,不建议将其保留,因此在完成测试和开发后,应该保护它。