当我尝试从 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。
感谢所有可以提供帮助的人!
答案 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}
。