【问题标题】:Can't write to Firebase database from Auth success listener无法从身份验证成功侦听器写入 Firebase 数据库
【发布时间】:2018-11-27 11:23:37
【问题描述】:

我正在使用 Firebase 身份验证(电子邮件和密码)和 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 
}

【问题讨论】:

  • 可以显示日志吗
  • 如果您在onComplete() 方法中使用以下代码行Log.d(TAG, user.getUid());,它会打印在logcat 中吗?请回复@AlexMamo
  • @AlexMamo,不,它不会打印在 logcat 中
  • @Lucem,日志的哪一部分?很长
  • @Fireio 所以这意味着认证过程没有完成,对吧?您是否尝试添加 if 语句的 else 部分并使用 task.getException().getMessage() 来查看是否有问题?

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


【解决方案1】:

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

如果您有进一步的疑问。请告诉我

【讨论】:

    【解决方案2】:

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

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

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

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

    第 3 步:发布

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 2022-08-06
      • 1970-01-01
      • 2017-09-09
      • 2017-11-04
      • 1970-01-01
      • 2012-09-15
      相关资源
      最近更新 更多