firebase - 如何保持 Firestore 和 Firebase 存储同步
问题描述
我正在开发我的第一个使用 firebase 构建的站点,并且对“无服务器”架构有点害怕。我习惯于做很多后端验证,让客户决定太多事情让我想要非常防御。
一个这样的例子就是这样。用户可以提交帖子。帖子可以包含文件。每个孤立的人都是可以管理的
firestore().collection('posts').add({
title: "my new post",
author: "my username",
uploaded: new Date(),
location: "a10b308cd" // some location in firebase storage
});
我可以使用 Firestore 规则来确保作者与经过身份验证的用户相匹配,诸如此类。
同样,我可以上传文件:
const uuid = new UUID();
const ref = firebase.storage().ref().child(uuid);
ref.put(file)
但是我很困惑我应该如何将这两者联系在一起。解决方案似乎是客户端为存储位置提供了一个 UUID(甚至命名空间给用户) - 并firestore.add()
在调用和ref.put()
调用中使用它。
不过,我似乎无法做很多事情来验证这种行为是否正确。我不习惯必须信任客户将文件放置在我后端的正确位置。不太可能会有很多恶意客户端制作混乱的链接,但这仍然让我非常不安。
甚至不是恶意场景,但如果我的存储没有提交(例如由于互联网问题或不正确的文件上传违反存储规则)并且客户端仍然尝试添加文档,我将无法firestore.rules
确定他们是否' res 一个他们正在链接的文件。
我有一个正则表达式来确定 uuid 是否看起来像 uuid,但客户仍然可以将其设置为“deadbeef1010101010”,我无法阻止它!随机生成的后端 UUID 比依赖客户端更可取——即使它们在命名空间时并不重要。
我在想这一切都错了吗?
解决方案
推荐阅读
- sql-server - SQL Update循环将最后一个值返回到所有记录?
- java - 如何制作 if else 语句以确保 login.java 上的编码更安全?
- swift - ios13 不需要的对话行为
- python - 熊猫将日期更改为更短的格式
- java - 为什么子类方法打印 null ?我究竟做错了什么?
- c++ - Windows C++ How to install GLFW library?
- javascript - How to implement single validate method for multiple input fields?
- bash - 如何使用 bash 脚本计算移动的文件?
- swift - 所以我有一个 UIImage 并且我想要它,所以当我点击它时,它会变成不同的图像
- c++ - 如何计算在数组中找到元素的次数