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

A user in firebase is not able to read or write its own documents in firestore

我有一个使用 google 帐户登录的用户,在 firebase 中,用户 ID 是“123”

在 firestore:data 中,存在一个集合,'users',有一个文档,'123',字段 'name : "test"'

在firestore:rules中,规则如下

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 内容如下:

用户编号:

123

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

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

我做错了什么?

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

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

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

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

如果您尝试像您

那样查询整个用户集合
  users: Observable<User[]>;

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