Firebase权限被拒绝

时间:2019-10-18 09:27:34

标签: google-cloud-platform google-cloud-firestore firebase-authentication firebase-security

我在完成验证后用电话号码呼叫此功能,此功能是使用自定义声明添加其号码以满足此数据库数据库安全规则

{
"rules": {
   "Users": {
      //".read": true,
      //".write": "auth.token.phone == newData.val()",
      //".read": "auth.uid != null",
      //".write": "newData.child('Personal Details').child('phone').val() === auth.token.phone"
      "$userNumber": {
        "Personal Details": {
          ".read": "auth.uid != null",
          ".write": "auth.token.phone == $userNumber"
        },
        "Notifications": {
        ".read": "auth.token.phone === $userNumber",
        ".write": "auth.uid != null"
      },
  }

此函数调用后刷新令牌

FirebaseAuth.getInstance().getCurrentUser().getIdToken(true).addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {

        @Override
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            Log.d("firebaseFunctionCall", "onComplete: token refreshed");
            checkUser();
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            loadingBar.dismiss();
            Log.d("firebaseFunctionCall", "onFailure: failed to refresh error: "+e.getMessage());
        }
    });

在这里,我正在验证用户的号码,然后将他的电话号码也添加到数据库中

但是我遇到Database Permission denied错误。

userRef = FirebaseDatabase.getInstance().getReference().child("Users");

如果需要更多详细信息,请询问我。但请帮助我解决这个问题。

1 个答案:

答案 0 :(得分:1)

您的查询正在尝试获取“用户”节点的全部内容,但是您的安全规则不允许这样做。规则will not filter out the nodes that the user may not access(请阅读并理解该链接)。您将只需要获取规则已授予用户访问权限的数据库部分。这意味着您的规则仅允许访问“用户/号码/个人详细信息”和“用户/号码/通知”,而没有其他权限。