数据无法通过Firebase的.validate规则

时间:2016-11-20 15:49:22

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

我有一个奇怪的错误,在我的数据库中引入了一些.validate规则后,每当我尝试从Android设备发送数据时,我就开始获得权限。

规则非常简单:

"rules": {
    "reportsToAdd": {
        ".read": "auth != null",
        ".write": "auth != null",
        ".validate": "newData.hasChildren(['displayName', 'title', 'description', 'lat', 'lng', 'imageLinks', 'uid', 'isNotified'])"
    }
}

只检查对象是否具有以下属性。

同时在Android设备中我有以下模型类

public class Report implements Serializable {
public String displayName;
public String title;
public String description;
public String uid;
public double lat;
public double lng;
public List<String> imageLinks;
public boolean isNotified = false;

public Report() { }
}

发送报告的逻辑:

FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference("reportsToAdd");
myRef.push().setValue(report, new DatabaseReference.CompletionListener() { ... });

当删除.validate规则时,一切正常,因此它不是身份验证问题,它只是验证,我现在检查了几次missblells,所有属性在发送时都不为空。我不认为它应该是Serializable接口引起的问题,因为它只是一个接口。

完整错误:com.google.firebase.database.DatabaseException: Firebase Database error: Permission denied

1 个答案:

答案 0 :(得分:3)

我认为你不应该在这个目录中验证/ reportsToadd / 因为您使用push()将它们上传到/ reportsToadd / randomstring /。

"rules": {
    "reportsToAdd": {
          "$id":{
               ".read": "auth != null",
               ".write": "auth != null",
               ".validate": "newData.hasChildren(['displayName', 'title', 'description', 'lat', 'lng', 'imageLinks', 'uid', 'isNotified'])"
               }
    }
}