Android Studio和Firebase中的权限被拒绝错误

时间:2018-10-02 12:46:11

标签: android firebase firebase-realtime-database google-cloud-firestore firebase-security-rules

我是Android的初学者,但遇到一个问题,指出“ Firebase权限被拒绝错误”。以下是我的代码段:

private void searchUser() {
        Log.d(Constants.TAG, "GetUser:  userId " + mFirebaseUser.getUid()+"   mFirebaseUser.getPhoneNumber()  " +mFirebaseUser.getPhoneNumber());

        if (!TextUtils.isEmpty(mFirebaseUser.getUid())) {
            showSnackBar(getString(R.string.fetching_profile_details), false);
            Utils.showProgressDialog(mActivity, false);

            final FirebaseDatabase database = FirebaseDatabase.getInstance();
            DatabaseReference userRef = database.getReference(Constants.FIREBASE_USERS);
            Query query = userRef.orderByChild(Constants.FIREBASE_USER_PHONE)
                    .equalTo(mFirebaseUser.getPhoneNumber())
                    .limitToFirst(1);

           query.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    Utils.hideProgressDialog();
                    if (dataSnapshot != null && dataSnapshot.exists() && dataSnapshot.getChildrenCount() > 0) {
                        //Found user with same number
                        //Log.d(Constants.TAG,"dataSnapshot  " +dataSnapshot);

                        for(DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
                            //Log.d(Constants.TAG, "childDataSnapshot  " + childDataSnapshot);
                            mUser = childDataSnapshot.getValue(com.hypertrack.wintry_consumer.models.User.class);
                        }

                        if (mUser != null) {
                            isNewUser = true;
                            preFillData();
                        }
                    }
                }

                @Override
               public void onCancelled(DatabaseError databaseError) {
                    Utils.hideProgressDialog();
                    Log.e(Constants.TAG, "onCancelled", databaseError.toException());
                    showSnackBar("Firebase Error finding User details: " + databaseError.getMessage());
                }
            });
        } else {
            showSnackBar("No firebase user available ");
        }
    }

以下是我的云存储规则:-

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

我遇到以下错误:

  

“ Firebase数据库错误:权限被拒绝”

Android Studio Screenshot

请提供解决方案的帮助。

1 个答案:

答案 0 :(得分:2)

您正在向我们展示如何从Firebase实时数据库查询数据,但是您从Cloud Firestore添加了安全规则。为了能够查询Firebase实时数据库,您还应该相应地更改特定部分中的规则。如果您在Cloud Firestore中设置了正确的规则,并不意味着它也将在Firebase实时数据库中工作。有两种具有不同规则的单独产品。

要解决此问题,请打开Firebase控制台,选择项目,单击左侧的数据库部分,然后选择实时数据库,然后转到规则标签,并确保您具有以下权限:

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

请务必访问有关security rules的官方文档。