AngularFirestore 权限缺失或不足

时间:2021-06-07 13:04:25

标签: javascript angular google-cloud-firestore firebase-security angularfire

当我尝试从 Firestore 获取文档时遇到以下错误(angular@12.0.3 和 angular/fire@6.1.5):

<块引用>

ERROR FirebaseError:权限缺失或不足。

根据firebase的手册,我写了firestore的规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /collection/document {
      allow read: if request.auth != null;
      allow write: if false;
    }
  }
}

这是我的服务的代码:

constructor(
    private store: AngularFirestore,
    private db: AngularFireDatabase,
    private auth: AuthService
  ) {
    // this.auth.user$ = this.angularFireAuth.user
    this.auth.user$.subscribe(user => {
      if (user && user.email) {
        this.store.doc('/collection/document').valueChanges().subscribe(_ => {
          console.log(_); // throws ERROR FirebaseError: Missing or insufficient permissions.
        });

        this.db.list<List>(`lists`, ref => ref.orderByChild('owner').equalTo(user.email))
          .valueChanges([], {idField: 'uuid'})
          .subscribe(_ => {
            console.log(_); // works fine
          })
      }
    });
}

我对 firebase 规则有点熟悉,所以订阅 rtdb 工作正常(使用生产就绪规则)。如果我使用 allow read: if true; 更改读取规则,我可以从 firestore 集合接收数据,但当然我希望规则更严格。所以问题看起来像规则中的 request.auth 似乎在没有充分理由的情况下等于 null。

感谢所有可以提供帮助的人!

2 个答案:

答案 0 :(得分:2)

问题出在 firebase 包中: https://github.com/angular/angularfire/issues/2838

在更新我的所有软件包(angular 12、angular/fire、firebase)后我确实遇到了同样的问题当我降级 fireabase 软件包时它得到了解决:

npm i firebase@8.6.1

答案 1 :(得分:0)

尝试将规则中的 match /collection/document 修改为 match /collection/{document}