数据库错误:FireBase中的权限拒绝错误

时间:2018-12-14 10:23:46

标签: android firebase firebase-realtime-database

我正在尝试将Firebase集成到我的Android应用程序中。我已按照fire base记录的步骤进行操作。当我尝试发送数据时,我无法发送。我在回调中遇到错误

**Permission denied**

并且回调中的错误代码为 -3

我在很多地方都在堆栈溢出中搜索了相对答案,但它对我不起作用。因为这是非常著名的线程

Firebase Permission Denied

在此线程中,提到需要在定义规则的数据库部分中添加以下代码。下面是代码

{
 "rules": {
  ".read": "auth != null",
  ".write": "auth != null"
}
}

当我去那个线程中提到的地方(进入数据库部分,然后进入规则区域)时,我已经找到了一些代码。并在下面提到该代码

service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
  allow read, write: if true;
}
}
}

我的问题是在通信数据库时出现权限被拒绝错误。当我按照线程中的说明添加代码时,Fire base无法识别该代码。如果需要,在什么地方放置代码是正确的?还是为什么我会收到该错误?我想念什么吗?

下面是我用于Firebase通信的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);

    mDatabaseReference = FirebaseDatabase.getInstance().getReference();
    DatabaseReference databaseReference = mDatabaseReference.child("users");

    //Get Firebase auth instance
    //auth = FirebaseAuth.getInstance();


    btnSignIn = findViewById(R.id.sign_in_button);
    btnSignUp = findViewById(R.id.sign_up_button);
    inputEmail = findViewById(R.id.email);
    inputPassword = findViewById(R.id.password);
    progressBar = findViewById(R.id.progressBar);
    btnResetPassword = findViewById(R.id.btn_reset_password);

    btnResetPassword.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //startActivity(new Intent(SignupActivity.this, ResetPasswordActivity.class));
        }
    });

    btnSignIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

    btnSignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String email = inputEmail.getText().toString().trim();
            String password = inputPassword.getText().toString().trim();

            if (TextUtils.isEmpty(email)) {
                Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show();
                return;
            }

            if (TextUtils.isEmpty(password)) {
                Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show();
                return;
            }

            if (password.length() < 6) {
                Toast.makeText(getApplicationContext(), "Password too short, enter minimum 6 characters!", Toast.LENGTH_SHORT).show();
                return;
            }

            progressBar.setVisibility(View.VISIBLE);

            User user = new User();
            user.setEmail(email);
            user.setPassword(password);
            user.setUserType(1);

            mDatabaseReference.child("users").setValue(user, new DatabaseReference.CompletionListener() {
                @Override
                public void onComplete(@Nullable DatabaseError databaseError, @NonNull DatabaseReference databaseReference) {

                    progressBar.setVisibility(View.GONE);

                    databaseReference.addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                            dataSnapshot.exists();
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
                            databaseError.getCode();
                        }
                    });

                }
            });


        }
    });
}

注意: /用户处的setValue失败:DatabaseError:权限被拒绝,这是我正在获取的日志。

1 个答案:

答案 0 :(得分:2)

您的规则说,只有授权用户才能从数据库读取和写入数据,但是您试图在代码中尝试与未注册用户一起插入数据

1-在插入数据之前先向firebase注册用户

2-允许未经授权的用户也可以写数据库

规则:-

{
  "rules": {

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

enter image description here