【问题标题】:Firestore Rule Failing While Using Get() on Newly Created Documents在新创建的文档上使用 Get() 时 Firestore 规则失败
【发布时间】:2017-12-14 17:17:56
【问题描述】:

在新创建的文档上使用 Firestore 规则中的 get() 会导致返回值为 false。如果您等待几秒钟并点击在同一个新文档上调用 get() 的安全规则,那么 get() 将返回预期值。我的规则和/或代码中是否缺少某些内容,或者这是 Firestore 的错误?

service cloud.firestore {
  match /databases/{database}/documents {

    match /budgets/{budgetId} {

      allow read: if resource.data.userId == request.auth.uid;
      allow create: if request.auth.uid == request.resource.data.userId;

      match /accounts/{accountId} {
        allow read, create, update: if userOwnsBudget();  // <--- failing for newly created budget documents
      }

      function userOwnsBudget() {
        return get(/databases/$(database)/documents/budgets/$(budgetId)).data.userId == request.auth.uid;
      }
    }
  }
}
const data: Budget = {
    userId: userId,
    budgetName: budgetName,
    currencyType: currencyType
};

try {
    const newBudget = await this.afs.collection<Budget>('budgets').add(data);

    const accountsCollection: AngularFirestoreCollection<BudgetAccount> = this.afs.collection<BudgetAccount>('budgets/' + newBudget.id + '/accounts');

    //Insufficient permission, but occasionally succeeds 
    accountsCollection.valueChanges().subscribe(accounts => {
        console.log(accounts);
    });

    setTimeout(() => {
        accountsCollection.valueChanges().subscribe(accounts => {
            console.log(accounts)
        });
    }, someArbitaryTime) // Typically waiting 5 seconds is enough, but occasionally that will still fail 

} catch(error) {
    console.error(error);
}

【问题讨论】:

    标签: javascript angular firebase google-cloud-firestore


    【解决方案1】:

    编辑:这个错误已经解决。

    不幸的是,目前这是一个已知问题。我们正在努力修复,一旦解决就会在此处更新。谢谢和抱歉!

    【讨论】:

    • 有什么问题或者我们可以看的吗?
    • 很遗憾没有,但我会确保更新我的答案并在修复后发表评论。对不起。
    • 我几乎在同一时间遇到了同样的问题。有趣的是,这似乎现在已经解决了。
    • 已经 10 个月了。这事有进一步更新吗?这会在 Firestore GA 之前解决吗?您还可以更新文档吗?
    • 天哪。对不起,我把球丢在这里了。这个问题实际上是在几个月前修复的,但我没有更新我的答案(现在完成)。如果仍有问题,请联系 Firebase 支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2019-07-27
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多