firebase - Firestore 规则路径不起作用
问题描述
我正在尝试创建一个功能 i Firestore Rules 来检查授权用户是否是文档的所有者。我已经使用模拟器来测试函数的结果,这是我尝试过的一些事情:
return request.auth.uid == 'fePQ2zznGnh7LkDZXonz' && database == '(default)'
返回真
resource.data.user is path
返回真
return resource.data.user == path('/databases/(default)/documents/users/fePQ2zznGnh7LkDZXonz')
返回真
return resource.data.user == path(/databases/$(database)/documents/users/$(request.auth.uid));
返回假
return resource.data.user == path(/databases/$(database)/documents/users/$(userId)).bind({"database": database, "userId": request.auth.uid});
返回假
我已经阅读了他们关于路径的文档,但我似乎找不到我错过的内容:https ://firebase.google.com/docs/reference/rules/rules.Path
在模拟器中,我输入了以下内容
Simulation type: get
location: /servers/6CKqA8ifVsRW3NNww3WF
authentication: true
provider: custom
payload: {
"uid": "fePQ2zznGnh7LkDZXonz",
"token": {
"sub": "",
"aud": "h4hosting-6f5c8",
"firebase": {
"sign_in_provider": "custom"
}
}
我要检索的是检查resource.data.user
uid 是否与request.auth.uid
. resource.data.user
的 firestore 数据库中的数据类型是具有值的文档引用users/fePQ2zznGnh7LkDZXonz
谁能指出我做错了什么?
解决方案
您是否尝试过编写以下规则?
return resource.data.user == /databases/$(database)/documents/users/$(request.auth.uid)
如果文档已经存储在 Firestore 中,这应该可以工作。如果要验证经过身份验证的用户只写属于他的文档,则必须在“请求”中进行检查:
request.resource.data.user
推荐阅读
- c# - 来自 Elasticsearch 请求的无效 NEST 响应 - 无效的文档格式
- flutter - 每1秒如何输出值?
- c# - MSIEnumRelatedProducts 可以针对远程计算机工作吗
- java - 未来的任务抛出由 IndexOutOfBoundsException 引起的 ExecutionException 而据我所知,我没有使用任何数组
- node.js - “fs 未定义”如何在 VueJS 文件中使用 fs
- jquery - jQuery 调用 MVC 异步方法来加载视图的下拉列表。列表数据未出现。找不到 jQuery $
- python - 无法使用 setup.py 中的 Github Actions 在 Ubuntu 中安装 Tensorflow 2.2.0rc0
- bash - 根据标准输出替换退出代码?
- reactjs - 反应语义 UI 菜单
- javascript - 如何使用 React 将点击事件分配给画布 Api 中的每个圆圈