我对 firebase 规则很陌生,我有点困惑
我有这个获取 uid 的代码:
this.authService.getAuthState().subscribe(user => {
this.editorId = user['uid'];
});
这是规则:
allow write: if request.auth != null
&& request.auth.uid == resource.data.uid;
我想要实现的是拥有一个可以做所有事情的用户,没有角色,甚至没有注册,我想与 request.auth != null
进行额外检查,因为如果有人设法以某种方式创建帐户,一切都会被暴露,所以我决定在每个文档上添加一个 uid,所以只有当我登录时,我才会得到我的 uid,然后规则将检查文档是否与请求数据库中的操作的文档具有相同的 uid。< /p>
在执行创建/更新之前,我将 editorId
提供给要传递给服务的对象,以便文档将包含编辑内容的 uid
。
当我得到 user['uid']
时,如果该值被其他一些随机字符串替换,firebase 规则将允许写入,它也会更改文档内的 uid,因此如果我再次尝试编辑,我不会被允许,因为我将从 authstate 获取当前用户 uid 并且它不会匹配。
我的思考过程是这样的:好的,我们通过 request.auth.uid
获取当前用户 ID,我们检查资源是否包含相同的 uid,然后继续与否。但是既然我在代码中更改了文档应该包含的 uid,为什么允许写入?它应该是用户 id 和为写作而发布的文档中存在的 id 之间的检查,或者我在这里没有得到的。
也许我太担心了?我不认为在安全方面过度担心是不好的做法,但这件事让我很困惑,我不能相信这条规则。