【问题标题】:Unable to add permissions to the firebase realtime databse无法向 Firebase 实时数据库添加权限
【发布时间】:2019-11-24 21:59:08
【问题描述】:

我想添加权限,以便只有经过身份验证的用户才能将数据读/写到我的数据库中。 但我尝试编写不同类型的权限,但每次都得到相同的结果。

数据库错误:权限被拒绝

如果读写设置为true,那么只有我可以读/写数据库。

//this works
{
  "rules": {
    ".read": true,
    ".write": true
  }
}

//does not work
{
  "rules": {
    "userdetails":{
      "$user_id":{
    ".read": "$user_id === auth.uid",
    ".write": "$user_id === auth.uid"
      }
    }
  }
}

//this also not works
{
  "rules": {
    ".read": "auth.uid != null",
    ".write": "auth.uid != null"
  }
}

输入数据的代码是这样的:

String userfirebaseid=FirebaseAuth.getInstance().getCurrentUser().getUid();
reff = FirebaseDatabase.getInstance().getReference().child("userdetails").child((userfirebaseid));

Map setValues = new HashMap();
setValues.put("eMail ID",user_id);
setValues.put("Name",user_name);
setValues.put("Phone Number",phn_no);
reff.setValue(setValues);

我的 Firebase 数据库

请告诉我我做错了什么。

【问题讨论】:

  • 如果您在FirebaseDatabase.getInstance().getReference().child("userdetails").child((userfirebaseid)) 之前记录userfirebaseid 的值,它会打印什么?另请注意:您在 userfirebaseid 周围有双括号,您可能希望将其删除。

标签: java android firebase firebase-realtime-database firebase-security


【解决方案1】:

首先使用下面的代码是正确的。

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

输入数据的代码看起来不错,尝试替换 Hashmap 以推送您的值并添加 onFailureListener 以便您可以看到 error 得到了什么:

Map<String,Object> map = new HashMap<String,Object>();
map.add("eMail ID",user_id);
map.add("Name",user_name);
map.add("Phone Number",phn_no);

reff.push().setValue(map).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            e.printStackTrace();
        }
    });

您可以阅读有关在实时 Firebase 数据库中保存数据的更多信息here

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 2021-09-14
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 2020-12-29
    • 2018-12-12
    相关资源
    最近更新 更多