我正在尝试一个简单的规则:如果我的records
集合中的文档包含与登录用户的电子邮件匹配的电子邮件(fatherEmail || motherEmail
),请允许该文档被阅读。无法正常工作-Missing or insufficient permissions
。
每种Firebase技术支持均建议使用一种方法来检索经过身份验证的用户的电子邮件地址:
function getUserEmail(){
return request.auth.token.email;
}
这是Stackblitz: https://stackblitz.com/edit/login-and-match-record-mvce?file=src%2Fapp%2Fauth.service.ts
使用经过验证的电子邮件登录: 用户: devcore2911@gmail.com 通过: foobar 如果您查看控制台,将会看到我上面提到的错误。
我的records
集合包含一个文档,该文档包含devcore2911@gmail.com
作为fatherEmail
属性的值,因此文档应该上拉:
答案 0 :(得分:0)
解决方案:我必须执行查询以过滤出与用户电子邮件匹配的文档。
这是解决问题的代码。请注意,由于Firebase查询不支持combineLatest
运算符,因此使用||
。
const matchFatherEmail = this.afs.collection("records", ref => ref.where("fatherEmail","==", this.authService.user.email));
const matchMotherEmail = this.afs.collection("records", ref => ref.where("motherEmail","==", this.authService.user.email));
this.records$ = combineLatest(matchFatherEmail.valueChanges(), matchMotherEmail.valueChanges())
.pipe(switchMap(docs => {
const [docsFatherEmail, docsMotherEmail] = docs;
const combined = docsFatherEmail.concat(docsMotherEmail);
return of(combined);
}))