我有一个奇怪的错误,在我的数据库中引入了一些.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
答案 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'])"
}
}
}