Firestore 安全规则:request.time“对象上未定义”

2023-11-27

我正在尝试创建一个基于的安全规则请求时间如上的示例所示Angular Firebase 网站.

我的功能是

function isThrottled() {
    return request.time < resource.data.lastUpdate + duration.value(1, 'm')
}

我正在努力的地方allow update: if isThrottled() == false

但是,当我尝试使用此规则更新文档时,由于以下原因而失败time未在对象上定义。

错误:simulator.rules 行 [169],列 [12]。产权时间为 对象上未定义。

不应该每个请求都有一个time or TimeStamp附在它上面?这与我初始化 Cloud Functions 或客户端应用程序的方式有关吗?

截图如下:

enter image description here enter image description here

EDIT

其余更新安全规则的片段如下:

service cloud.firestore {
  match /databases/{db}/documents {
    match /users/{userId} {
      match /username/{id} {
        allow update: if isSelf(userId)
                      && usernameAvailable(incomingData().username)
                      && incomingData().username is string
                      && incomingData().username.size() <= 25
                      && incomingFields().size() == 1
                      && isThrottled() == false;
      }
    }

    function incomingData() {
      return request.resource.data
    }
    function isThrottled() {
        return request.time < resource.data.lastUpdate + duration.value(1, 'm')
        }
    function incomingFields() {
        return incomingData().keys()
    }
    function isSelf(userId) {
        return userId == currentUser().uid;
    }
    function usernameAvailable(username) {
        return !exists(/databases/$(db)/documents/usernames/$(username));
    }


  }
}

The username集合是每个集合下的子集合user文档(在users根集合。每个username文档只有 1 个名为username用户可以更新)。


这可能对您的情况特别没有用,但在检查令牌对象上的自定义声明时我遇到了同样的错误。

在访问该字段之前,您可以使用in检查对象上是否存在该属性。如果未定义代理,此代码会生成错误:

allow write: if request.auth != null && request.auth.token.agent == true;

如果未定义代理,此代码可以正常工作:

allow write: if request.auth != null && "agent" in request.auth.token && request.auth.token.agent == true;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firestore 安全规则:request.time“对象上未定义” 的相关文章

随机推荐

  • 我需要在react-native项目中保留.watchmanconfig文件吗

    默认反应本机项目生成 watchmanconfig只是空对象的文件 我可以安全地删除它吗 一个子问题是 我可以做 参考任何看守配置来以某种方式改善反应本机项目体验吗 watchmanconfig可以安全删除 If Watchman没有找到
  • Keycloak - 将所有用户映射到角色

    我知道keycloak已经暴露了下面的api
  • 自定义功能区 onAction 语法问题

    我跟着这里的路线为 Access 应用程序创建自定义功能区 但所有按钮都不起作用 我不断收到一条错误消息 指出 Access 无法找到该函数或宏 即使它是公共的且位于标准模块中 最终我发现如果我使用以下语法它会起作用 onAction fn
  • ViewPager2 无法动态添加删除片段

    在索引处删除 添加片段会导致 Viewpager2 中出现意外行为 这是不可能的ViewPager但预计将与Viewpager2 它会导致重复片段和不同步TabLayout 这是一个演示项目重现了这个问题 有一个切换按钮 可以删除片段并将其
  • Keras 的 dropout 实现正确吗?

    The KerasDropout参考的实施这张纸 以下摘录自该论文 这个想法是在测试时使用单个神经网络而不丢失 该网络的权重是经过训练的按比例缩小的版本 重量 如果在训练期间以概率 p 保留一个单元 则 该单元的输出重量在测试时乘以 p 为
  • git:当前分支和分支创建之间的差异

    想象一下 我三天前创建了分支 B 这是我目前正在工作的分支 现在我想知道自创建分支以来发生了什么变化 X 这给出了 B 和 X 之间的差异 如图中的虚线 git diff A 上面的命令很方便 因为它很短而且我不需要记住 X 但是 我超级懒
  • Caffe 训练无需测试

    我在用Caffe在已知图像数据库上训练 AlexNet 我正在进行基准测试并希望排除测试阶段 这里是solver prototxt对于亚历克斯网络 net models bvlc alexnet train val prototxt tes
  • 从 AppDelegate 呈现特定的视图控制器

    每次我的应用程序处于活动状态时 我都尝试呈现一个视图控制器 密码请求类型视图 输入正确的密码后 它应该从堆栈中弹出 我尝试推送的密码视图不是初始视图控制器 因此我无法从 AppDelegate 的 applicationDidBecomeA
  • 使用 cmd.exe 时如何处理引号字符

    我正在尝试这样做 cmd exe C C Program Files Somewhere SomeProgram exe gt C temp Folder Containing Spaces SomeProgram out 但是 我遇到了与
  • 在星型模式中,事实和维度之间的外键约束是否必要?

    我第一次接触数据仓库 我想知道事实和维度之间是否有必要有外键约束 没有它们有什么主要缺点吗 我目前正在使用关系星型模式 在传统应用程序中 我习惯了它们 但我开始怀疑在这种情况下是否需要它们 我目前在 SQL Server 2005 环境中工
  • 加载 32 位 DLL 时出现 BadImageFormatException,目标为 x86

    我有一个 DLL FreeType 它肯定是 32 位的 标头 IMAGE FILE MACHINE I386 我想通过 DllImport 从 C 代码中使用它 我的应用程序的目标是x86 IntPtr Size是4 进程是32位 但我得
  • php-excel-reader - UTF-8 问题

    我在用着php excel reader2 21 用于将 XLS 文件转换为 CSV 我编写了一个简单的脚本来执行此操作 但我在使用 unicode 字符时遇到了一些问题 它不会从某些单元格返回值 例如 它不存在单元格内容问题cen k p
  • 是否可以在没有 Javascript 的情况下进行客户端验证

    确实很简单的问题 可以冒险猜测 但只需要确定 只需要一个是 否的答案 因为似乎无法在任何地方澄清 原因 手机网页 所有移动浏览器对 javascript 的支持都是 粗略的 因此完全放弃了任何 javascript 并且想知道是否有任何替代
  • ASP.NET 异常:无法解析远程名称:“apiconnector.com”

    正如标题所示 我从 ASP NET 页面收到以下异常 无法解析远程名称 apiconnector com 不过 我可以从浏览器导航到该地址 因此我知道它是可以访问的 为什么 ASP NET 无法导航到该地址 编辑 我到底是如何 导航 的 好
  • PHP 脚本在 HTTP 请求结束后还能继续运行吗?

    如何编写即使在刷新一些文本并结束 HTTP 请求后仍能继续运行的 PHP 脚本 这可能吗 永久运行 PHP 应用程序或直到 php 终止 ignore user abort true set time limit 0
  • 如何在 WAMP 中启用内存缓存

    如何在WAMP中安装memcache 我没有找到任何 php memchephp ini 现在我该怎么做 Ryan 感谢您的步骤 现在在 WAMP 中启用了 memcache 我也在 PHPINFO 中进行了交叉检查 内存缓存正在显示 我已
  • Express.js:如何在 req.param 中制作 app.get('/[:userId]i'..) ?

    我使用的是nodejs 0 8 21 和express 3 1 0 我需要阅读userId来自像这样的网址http mysite com 39i 它的意思是userId 39 怎么做 谢谢 样本 app get userId i funct
  • JCrop,如何清除所有div宽度/高度标记?

    我有一个个人资料图片系统 允许使用 jCrop 进行图像裁剪 我注意到 如果用户重复该过程几次 裁剪尺寸将无法正确计算 因为之前的图像仍然存在 我已经尝试过 API 中的 destroy 方法 但这并没有清除来自 API 的图像源 jcro
  • 保存带有背景图像的画布

    我有一个画布的背景图像 并向画布添加了一些基本元素 现在我想保存画布 png 以及画布样式的背景图像 Tried var canvas document getElementById mycanvas var img canvas toDa
  • Firestore 安全规则:request.time“对象上未定义”

    我正在尝试创建一个基于的安全规则请求时间如上的示例所示Angular Firebase 网站 我的功能是 function isThrottled return request time lt resource data lastUpdat