ios - 如何在 iOS 中使用 Firestore 检索经过身份验证的用户数据?

标签 ios swift firebase firebase-security

我正在使用 Firebase,并使用他们的身份验证框架和 Firestore 数据库。

我的数据库模型非常简单:我想保留一个“用户”集合,其中包含每个注册用户的文档(由用户的 uid 标识)。该用户文档将保存代表用户费用的文档集合。 正在关注their documentation我已经在 firebase 控制台中设置了规则,如下所示:

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId=**} {
        allow read, update, delete: if request.auth.uid == userId;
        allow create: if request.auth.uid != null;
    }
  }
}

在我的 iOS 应用程序中,当用户登录时,我想使用以下代码检索用户的费用:

  func retrieveUserExpenses() {
    guard let dbRef = userExpensesDbRef() else {
      print("Attempting to retrieve expense for unlogged user")
      return
    }

    dbRef.getDocuments { [unowned self] (snapshot, err) in
      if let err = err {
        print("Error retrieving expenses \(err)")
      } else {
        print("Retrieved expenses!")
        snapshot?.documents.forEach {
          if let expense = self.createExpenseFromDocument($0) {
            self.expenses.append(expense)
          }
        }
        self.loadedExpenses = true
      }
    }
  }

  private func userExpensesDbRef() -> CollectionReference? {
    guard let loggedInUser = AuthHandler.shared.loggedInUser() else {
      return nil
    }
    return db.collection("users").document(loggedInUser.uid).collection("expenses")
  }

问题是对 getDocuments 的调用会打印错误行:

Error retrieving expenses Error Domain=FIRFirestoreErrorDomain Code=7 "Missing or insufficient permissions."

我通过打印检查了以下内容:loggedInUser.uid 与我在 Firebase 控制台“用户”选项卡的“身份验证”部分中看到的内容相同。

非常感谢任何有关我无法安全检索数据的地方的指导或提示。

最佳答案

进入数据库 -> 规则 ->

更改允许读、写:如果为 false;为真;

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if true;
      allow write: if false;
    }
  } 
}

关于ios - 如何在 iOS 中使用 Firestore 检索经过身份验证的用户数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58924510/

相关文章:

ios - 将 Base64string 转换为字符串时出现问题

swift - 随机化节点移动持续时间

swift - 如何使用排序正确显示可读性强的输出?

ios - 当您快速滚动时,异步加载的 tableView 单元格图像会闪烁

objective-c - iOS performSelectorOnMainThread 有多个参数

ios - 从 Android 迁移到 iOS AWS IoT

ios - 当我点击一个按钮时,如何让我的 iPhone 振动两次?

java - Firebase,删除用户时无法删除用户记录

android - 如何在 Android 中使用 Firebase 存储用户数据?

firebase - 如何在python中增加Firestore字段值?