错误域=FIRFirestoreErrorDomain 代码=7“权限缺失或不足。”

2024-04-18

所以我有以下代码从 firestore 检索文档,该函数在我的 viewDidLoad() 中调用:

func loadAnnotations() {
    
    db.collection("jumpSpotAnnotations").getDocuments { (querySnapshot, error) in
        if let error = error {
            print("There was an issue retrieving data from Firestore: \(error)")
            
            let alertController = UIAlertController(title: "Oops!", message: "We are having trouble loading the cliff jumping locations.  Be sure to check your internet connection.", preferredStyle: .alert)
            
            let okayAction = UIAlertAction(title: "Okay", style: .cancel, handler: nil)
            
            alertController.addAction(okayAction)
            
            self.present(alertController, animated: true, completion: nil)
        } else {
            if let snapshotDocuments = querySnapshot?.documents {
                //print(snapshotDocuments)
                for doc in snapshotDocuments {

其余的功能并不重要。我在检索数据时收到错误:Error Domain=FIRFirestoreErrorDomain Code=7“缺少权限或权限不足。”当我第一次得到这个消息时,我意识到这是因为我从创建应用程序的 Firebase 项目的第一天起就没有更新我的安全规则,并且已经过去了 30 天,所以 Google 不会再访问直到我更新了规则。这些是原始规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}

出于此应用程序的目的,现在我可以满足用户创建和读取任何数据的要求。然而,我不希望他们能够修改或删除数据。所以我在 Stack 上问了一个关于如何做到这一点的问题,并在这里得到了回答:如何防止Firestore文档被删除/修改,但允许所有读取和写入 https://stackoverflow.com/questions/64178236/how-to-prevent-firestore-documents-being-deleted-modified-but-allow-all-reads所以我更新的安全规则现在是:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /collection1/{jumpSpotAnnotations} {
      allow read, create;
    }
  }
}

但是,当我尝试检索数据时,我仍然收到完全相同的错误。新的安全规则已经发布。所以我的问题是,在按发布正式更新后我需要做些什么,并且让我的模拟器能够检索数据,或者我的安全规则中的代码或 Xcode 中的函数是否不正确为了我想做的事。请记住,Xcode 中的功能与原始规则完美配合(我将规则完全开放,就像我第一次制作 Firestore 项目时那样,这样我就可以轻松地在模拟器中进行测试)。任何帮助深表感谢!


在我回答你之前的问题时,我建议你说出各个藏品的名称。你只是拿走了我提供的内容并逐字复制。您需要在规则中使用实际集合的名称:

    match /jumpSpotAnnotations/{id} {
      allow read, create;
    }

再次,我强烈建议您阅读我链接到的文档,以便您可以了解安全规则的工作原理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

错误域=FIRFirestoreErrorDomain 代码=7“权限缺失或不足。” 的相关文章

随机推荐

  • magento 付款流程..一般如何运作

    有一个问题 我希望这是问的正确地方 不太明白magento 中的付款方式 客户去结账 假设想要以客人身份付款 因此提供地址等 最后找到付款方式 然后我希望客户通过信用卡付款 已经为我选择的网关 银行 安装了模块 那时 我希望用户被重定向到第
  • Mysql 变量无法通过 php mysql 查询工作

    我有这样的疑问 query SET points 1 SET num 0 SELECT id rank num if points rank num num 1 as point rank FROM said ORDER BY rank 1
  • 调用静态方法时发生致命错误

    所以 这是我的情况 我正在使用 CodeIgniter 我已经设置了一个助手 DK 文件夹下的 string helper 我已经在 dk string helper php 中设置了 dkString 类 static function
  • 测量 OpenMP Fork/Join 延迟

    由于 MPI 3 具有共享内存并行功能 并且它似乎与我的应用程序完美匹配 因此我正在认真考虑将我的混合 OpemMP MPI 代码重写为纯 MPI 实现 为了给棺材里钉上最后一颗钉子 我决定运行一个小程序来测试 OpenMP fork jo
  • 私人变更的用例

    假设我有以下场景 我克隆了一些开源项目 例如从 URL X 克隆的项目 现在我有了它的本地克隆 我对本地克隆进行了一些更改以尝试并在本地提交它们 现在我想要的是以下内容 我想从开源项目 X 获取更新 只需获取其所有最新代码 无需我进行任何更
  • 使用 Google 进行 OWIN 身份验证

    我在 ASPNET MVC 项目上使用 owin 身份验证 使用google时遇到以下问题 1 用户使用google帐户登录 2 用户退出 3 下次用户尝试登录时 将自动使用当前的google帐户再次登录 而不提示用户是否要使用其他帐户 问
  • gdb nostop SIGSEGV 在特定线程上

    我有一个程序故意在一个线程上出现段错误 但我有一个问题 另一个线程出现段错误 我想用 GDB 捕获它 我看到我可以 handle SIGSEGV nostop noprint 但我只想在故意这样做的线程上这样做 有可能吗 我会解释一下 我有
  • extern auto 变量没有初始值设定项

    我需要在我的 C 程序中使用全局时间戳 std chrono high resolution clock now 我在头文件Header h中声明了它 include
  • Tomcat 10 上的 Spring Boot 2.x 问题

    我试图在 Tomcat Docker 容器中部署一个 war 文件 但总是得到404 Not Found页 我通过以下方式创建了 Spring Boot 项目Intellij 教程 https www jetbrains com help
  • javascript 在多个链式异步函数上等待

    假设我有以下内容 const a new A await a getB action A prototype getB is async也B prototype action 如果我尝试等待函数的链接 则会收到错误 TypeError a
  • SoapExtension 未加载

    我正在尝试写一个肥皂扩展 但框架没有加载它 我已经添加到 web config
  • 不同的Android SDK版本使用不同的图标

    我的 Android 菜单有图标 在 Android 3 上 我使用黑色 ActionBar 因此图标为白色 然而 在 Android 2 x 上 菜单本质上是白色的 这意味着图标几乎不可见 如何为不同版本使用不同的菜单图标 我假设我可以使
  • 我们如何重命名MySQL 5.0中的数据库名称[重复]

    这个问题在这里已经有答案了 我在用MySQL 5 0 我创建了一个名为accounts 但现在我想将数据库名称更改为FinanceAccounts 如何更改数据库名称MySQL 5 0 我认为只有一种方法 除了重命名 MySQL datad
  • 安全移动 Microsoft SDK 文件夹

    我的硬盘上有一个文件夹 C Program Files Microsoft SDKs 我想知道将其移动到外部驱动器是否安全 Visual Studio 或任何其他工具是否依赖于此特定文件夹 注册表中有相当多的条目 至少在我的注册表中 指向该
  • Cython指定固定长度字符串的numpy数组

    我有一个函数 我想使用 Cython 来处理大量固定长度的字符串 对于标准 cython 函数 我可以像这样声明数组的类型 cpdef double g double in arr cdef double out arr np zeros
  • 对话框的对象位置 Libgdx

    我有一个对话框 Dialog dialog new Dialog style dialog setSize 400 500 dialog setPosition Gdx graphics getWidth 2 200 Gdx graphic
  • 使用自动 bash 脚本检查 FTP 中是否存在文件

    我想自动化执行以下操作的批处理作业 检查我的file txt存在于FTP服务器中 我将其重命名为file trt 检查我的file txt and file trt存在 如果存在我发送电子邮件 我运行另一个脚本 最后我删除file trt
  • Ruby+Anemone Web Crawler:正则表达式匹配以一系列数字结尾的 URL

    假设我正在尝试抓取一个网站并跳过一个像这样结束的页面 我目前正在 Ruby 中使用 Anemone gem 来构建爬虫 我正在使用skip links like方法 但我的模式似乎永远不匹配 我试图使其尽可能通用 因此它不依赖于子页面 而只
  • 为什么这个 Sql 语句(有 2 个表连接)需要 5 分钟才能完成?

    更新 下面添加了 3 个更新 以下sql语句需要5分钟才能完成 我只是 不 得到 它 第一个表有 6861534 行 第二个表少了一点 第三个表 包含 4 个地理字段 与第一个表相同 Those GEOGRAPHY第三个表中的字段 它们不应
  • 错误域=FIRFirestoreErrorDomain 代码=7“权限缺失或不足。”

    所以我有以下代码从 firestore 检索文档 该函数在我的 viewDidLoad 中调用 func loadAnnotations db collection jumpSpotAnnotations getDocuments quer