Firebase缺少已验证用户的权限或权限不足

fhity93d  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(110)

即使用户已通过身份验证,创建操作仍会导致错误:

Missing or Insufficient Permissions

下面是我使用的Firestore规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
        // Sanitization of Request
      function recipeHasOnlyAllowedFields() {
        let requiredFields = [
            'name',
          'category',
          'directions',
          'publishDate',
          'ingredients'
        ];
        let keys = request.resource.data.keys();
        
        return keys.hasAll(requiredFields) && keys.hasOnly(requiredFields);
      }
      
      // Validation of Request
      function isRecipeValid() {
        let data = request.resource.data;
        
        return (
            data.name is string && data.name != '' &&
          data.category is string && data.category != '' &&
          data.directions is string && data.directions != '' &&
          data.publishDate is timestamp &&
          data.ingredients.size() > 0
        )
      }
    
      allow read: if true;
      
      allow create, update: if (
        request.auth != null &&
        recipeHasOnlyAllowedFields() &&
        isRecipeValid()
      );
      
      allow delete: if request.auth != null;
    }
  }
}

下面是我发送的数据:

{
  name: "Bread",
  category: "bakedGoods",
  directions: "Mix the ingredients together",
  ingredients: ["3 cups of flour", "1 cup of water"],
  publishDate: "01/01/2023" // pretend this is a timestamp
  isPublished: true
}
kzmpq1sx

kzmpq1sx1#

这个问题最终导致isPublished不是基于此存储的自定义规则的允许字段。一旦该字段从发送的数据中删除(或添加到允许字段中),create调用就会再次工作。
错误消息感觉像是一个红色的鲱鱼,因为它是一个数据问题,而不是一个身份验证或授权问题。
希望在firebase中有更好的方法来验证数据,并提供更好的错误消息。

相关问题