【问题标题】:A user in firebase is not able to read or write its own documents in firestorefirebase 中的用户无法在 firestore 中读取或写入自己的文档
【发布时间】:2020-07-28 11:27:44
【问题描述】:

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

在 firestore: data 中,存在一个集合“用户”,其中包含一个文档“123”,字段为“名称:“测试””

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

用户名:

123

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

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

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    如果您尝试查询整个用户集合,就像您认为的那样

      users: Observable<User[]>;
    

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

    【讨论】:

      猜你喜欢
      • 2020-10-23
      • 1970-01-01
      • 2019-02-17
      • 2022-11-10
      • 2021-09-25
      • 2020-02-07
      • 2021-11-18
      • 2020-12-17
      • 1970-01-01
      相关资源
      最近更新 更多