提问人:Shani Mir 提问时间:11/9/2023 最后编辑:Frank van PuffelenShani Mir 更新时间:11/9/2023 访问量:30
Firebase Firestore 从数据库中检索用户数据时返回错误
Firebase Firestore retrieving user data from database returning error
问:
我正在尝试从Firestore中检索用户信息,它一直向我显示以下错误消息。
错误 = 侦听用户查询失败:权限缺失或不足
Firestore 安全规则:
match/user/{userId} {
allow read: if request.auth.uid == userId;
allow write: if true;
allow update: if request.auth.uid == userId;
allow delete: if request.auth.uid == userId;
}
法典
func getUser() {
if let uid = Auth.auth().currentUser?.uid {
db.collection("user").getDocuments { snapshot, error in
if error == nil {
if let snapshot = snapshot {
DispatchQueue.main.async {
self.userInfo = snapshot.documents.map { d in
return User(userId: d.documentID,
email: d["email"] as? String ?? "",
tokens: d["tokens"] as? Int ?? 0)
}
}
}
} else {
Text("error")
}
}
} else {
Text("error")
}
}
有没有人处理过这种问题?
如果将安全规则更改为允许读取:if request.auth.uid != null = 它将返回数据库中所有用户的用户数据,这是不正确的。
答:
1赞
Frank van Puffelen
11/9/2023
#1
您的规则仅授予用户读取其自己的文档的权限,但您的代码会尝试从集合中获取所有文档。安全规则不是筛选器,而是确保代码请求的数据不会超过其有权访问的数据。
因此,您需要更新代码以仅请求它有权访问的文档。像这样的东西:
db.collection("user").document(uid).getDocument { document, error in
...
与错误无关,但请注意,您的 和 规则在这里没有执行任何操作 - 因为您已经授予用户对同一集合的所有权限,并且包括 、 和 。由于规则更宽松,其他人不会做任何事情。update
delete
write
create
update
delete
write
有关更多信息,请查看有关精细权限的 Firestore 文档。
评论