我正在使用 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/