我启动了我的第一个开源仓库项目EphChat,人们迅速开始涌入请求。
Firebase有没有在安全规则中限制请求的方法?我认为可以使用请求时间和先前编写数据的时间来实现,但是在文档中找不到如何执行此操作的任何信息。
当前的安全规则如下所示。
{
"rules": {
"rooms": {
"$RoomId": {
"connections": {
".read": true,
".write": "auth.username == newData.child('FBUserId').val()"
},
"messages": {
"$any": {
".write": "!newData.exists() || root.child('rooms').child(newData.child('RoomId').val()).child('connections').hasChild(newData.child('FBUserId').val())",
".validate": "newData.hasChildren(['RoomId','FBUserId','userName','userId','message']) && newData.child('message').val().length >= 1",
".read": "root.child('rooms').child(data.child('RoomId').val()).child('connections').hasChild(data.child('FBUserId').val())"
}
},
"poll": {
".write": "auth.username == newData.child('FBUserId').val()",
".read": true
}
}
}
}
}
我希望对整个Rooms对象的写入(和读取?)进行速率限制,以便每秒只能进行1个请求(例如)。
$user
。不确定当前的实现是否这样做,但您可能还需要限制重新发送,并可能为每个消息设置a和min时间窗口。这听起来对您来说正确吗?我想问题在于,您可以将消息组合在一起以绕过速率限制... - Merlyn Morgan-Graham