Firebase UID与文档ID和Firestore规则

时间:2020-02-26 16:51:24

标签: swift google-cloud-firestore firebase-security

嗨,我在这里与Firebase用户UID和Firestore文档ID(userId ???)...有点困惑,并在寻求帮助:-)

通过创建用户,我得到一个UID并将其写入数据库

 let db = Firestore.firestore()
 db.collection("user").addDocument(data: [
 "name": "confused",
 "uid": result!.uid ])

通过这样做,我得到了一个唯一的文档ID(标记为绿色),我也认为它是userId:

Screenshot Firestore

我想要实现的是用户只能读写他的文档(绿色),而不能读写其他文档(红色)

因此我使用了以下规则

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // Make sure the uid of the requesting user matches name of the user
    // document. The wildcard expression {userId} makes the userId variable
    // available in rules.
    match /user/{userId} {
      allow read, update, delete: if request.auth.uid == userId;
      allow create: if request.auth.uid != null;
    }
  }
}

因此,UID和文档ID(userId ???)应该建立连接吗?但是我真的不明白吗?在我的应用中,我想检索用户的文档ID,以便稍后在http-trigger上使用它,但是我只能获取UID

print(Auth.auth().currentUser!.uid)

任何想法还是我完全理解错误?

1 个答案:

答案 0 :(得分:4)

使用用户的UID作为自己文档的ID是正常的。现在,您正在使用addDocument,它告诉Firestore为文档分配一个随机ID。这样,安全规则将无法正常工作(因为Firebase Auth分配的ID永远不会与Firestore分配的文档ID匹配。您应该使用setDocument并将Firebase Auth中的UID指定为要写入的文档ID。