我有一个在离线模式下使用Firebase数据库的应用程序(通过调用FirebaseDatabase.getInstance().setPersistenceEnabled(true)
)。在数据库中,只有当其他节点中的值设置为true时,用户才能访问该节点,规则如下所示:
{
"rules": {
".write": "auth != null",
".read": "false",
"mynode": {
"$dataId": {
".read": "auth != null && root.child('userAccessNode/' + auth.uid + '/' + $dataId).val() == true"
}
}
}
}
当设备连接到互联网时,它可以正常工作。但是,当我在设备上转换飞行模式时,回拨addValueEventListener(ValueEventListener)
不会返回任何内容 - 也不会出现错误,而不是值,只有在我再次打开互联网连接时才会挂起。
我确保在脱机之前检索了两个节点,因此我确信有问题的节点和保存访问信息的节点已被缓存。
对于具有简单规则的其他节点,例如(auth!= null),离线模式工作正常,但在这种情况下不行。
我做错了吗?知道我怎么能做这个工作?规则(依赖于其他节点)评估在离线时如何工作?
答案 0 :(得分:1)
Firebase实时数据库安全规则始终在服务器端进行评估。这可以防止恶意客户端绕过这些规则。