Firebase中的用户无法在Firestore中读取或写入自己的文档

时间:2020-04-15 13:13:59

标签: javascript google-cloud-firestore firebase-authentication angularfire2

我有一个使用Google帐户登录的用户,并且在firebase中,用户ID为“ 123”

在firestore:数据中,存在一个名为“用户”的集合,其中包含一个文档为“ 123”且字段为“ name:“ test”'

在“ firestore:规则”中,规则如下

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

在我的组件中,我的代码是:

  users: Observable<User[]>;

  ngOnInit()
  {
    this.users = this.firestore.collection<User>('users'); 
  }  

  constructor(public auth: AngularFireAuth, private firestore : AngularFirestore) {}

HTML:

<ul>
   <li *ngFor='user of angObs | async>
    {{ user.name }}
   <li>
<ul>
<div *ngIf='auth.user | async as user'>
    <p>User id:</p>
    {{ user.uid }}
</div>

hmtl读取:

用户ID:

123

当规则为request.auth.uid != null;时,用户将看到数据。

当规则为request.auth.uid == userId;时,用户看不到数据。

我在做什么错?

1 个答案:

答案 0 :(得分:3)

您正在查询整个用户集合,因此无法通过此测试,因为您的userId需要匹配每个文档ID。

您需要指定文档的补丁,例如:

this.users = this.firestore.collection('users').doc<User>(userId).get()

那只会导致单个用户文档而不是User[]

如果您尝试查询整个用户集合,例如您的

  users: Observable<User[]>;

您需要将自定义属性添加到确定权限的用户对象