Firebase如何防止滥用文件上传和删除旧文件?

时间:2016-06-20 20:20:36

标签: firebase firebase-storage

在firebase中,存储功能很舒适。但是我有两个问题要使用存储功能。

  1. 如何防止用户无限制地上传文件?例如,如果我可以写/ {uid} / {timestamp} / {fileName}路径,用户可以上传,直到存储爆炸。
  2. 如何跟踪旧文件并将其删除?如果用户使用图像文件上传聊天消息并删除图像,则文件仍存在于存储中。是否有任何钩子来管理这个?
  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

好问题:

您可以使用Firebase Storage Security Rules强制执行上传的任意约束。只要文件在名称或元数据中有一条唯一的标识信息,您就可以将其与用户联系起来并强制执行基于时间的访问(以及其他内容)。一个简单的例子:

match /files/{userId}/{fileName} {
  // Only allow the authorized user to write to their files
  allow write: if request.auth.uid == userId;

  // Allow reads if the resource was created less than an hour ago
  allow read: if resource.timeCreated < request.time + duration.value(60, "m");
}

您正在要求垃圾收集系统:)简短的回答是,如果您在客户端上删除任何数据库对象并执行任何文件删除,那么它是最好的,但是我们都知道客户端是不可靠的。您还可以设置批处理作业(比如每天)从private backup读取数据库数据,检查不再引用哪些blob,并删除它们。您还可以等待Google Cloud Functions,并执行操作(例如在文件上载时写入数据库)以同步此信息。最后,您可以使用Object Lifecycle Management方法在一段时间后清理存储桶中的对象(删除,存档等)。