错误:读取规则文件firestore.rules

时间:2018-09-24 06:39:56

标签: firebase google-cloud-firestore

我尝试使用Firebase作为主机时部署网站,并删除了firestore.rules文件,因为我不认为我需要使用Cloud Firestore数据库(我只是为现在)。

我已经按照their documentation中所述的所有步骤进行操作。

运行firebase deploy时出现错误:

Error: Error reading rules file firestore.rules

我不知道该如何超越。有人可以帮我解决这个问题吗?谢谢!

3 个答案:

答案 0 :(得分:0)

如何检索您现有的 Cloud Firestore 规则

转到您的 Firebase Console,然后从侧边栏中的 Cloud Firestore 类别中单击 Build。 您可以在屏幕顶部(Cloud Firestore 标题下方)看到一个 Rules 标签。打开 Rules 标签。现在,您可以看到当前处于活动状态的规则以及到目前为止您已部署的所有其他规则(通过 CLI 或 Firebase 控制台)。

您可以从此处复制规则并将其粘贴到项目文件夹中名为 firestore.rules 的文件中。

Cloud Firestore Rules Tab

如何修复错误“错误:读取规则文件 firestore.rules 时出错”

如果您为 firestore.rules 文件中的 firebase.json 设置了错误的路径(例如将文件移动到子文件夹)或者您没有 {{1 }} 文件,但在 firestore.rules 中引用它。

firebase.json 中设置的错误路径

从 Firebase 项目文件夹中打开 firebase.json 文件。你可以在这个文件中找到一些路径和文件名。

查找 firebase.json 类别。它应该类似于:

firestore

您可能想要更新您的路径或文件名以匹配您的 "firestore": { "rules": "firestore.rules", "indexes": "firestore.indexes.json" }, 所在的位置。

如果您找不到 firestore.rules 的任何路径,您可以将它们添加到您的 firestore 文件中。它现在可能看起来像这样(注意:我已经移动了我的 Firestore 文件并更改了 firebase.jsonfirestore.rules 的路径):

firestore.indexes.json

如果您不想从项目文件夹中部署任何 Firestore 规则

如果您想在 { "firestore": { "rules": "firestore/firestore.rules", "indexes": "firestore/firestore.indexes.json" }, "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] }, "functions": { "predeploy": [ "npm --prefix \"$RESOURCE_DIR\" run lint", "npm --prefix \"$RESOURCE_DIR\" run build" ], "source": "functions" } } 上方部署 Firestore rules,您可以从项目文件夹中删除 Firebase Consolefirestore.rules 文件并删除 firestore.indexes.json部分来自您的 firestore。虽然我建议将它们保存在您的项目文件夹中,以便您可以在您的版本控制系统中跟踪它们。

请记住,您也可以删除 firebase.json 文件中未通过 CLI 部署 firebase.json 的引用,并保留 rulesfirestore.rules文件。

如果您不想通过 CLI 部署 Firestore 规则,请删除它:

firestore.indexes.json

答案 1 :(得分:0)

如果您正在学习本教程 https://firebase.google.com/codelabs/firebase-web#14 那么这里的问题是当您尝试部署运行此命令 firebase deploy --except functions 时,此脚本将尝试在根目录中查找带有 firestore.rulesstorage.rules 的文件,而您将得到以下 Error: Error reading rules file storage.rules 这个文件,因为你告诉过这样做。

因此要使用 firebase deploy --except functions 成功部署它,您必须在根目录中创建此文件,然后才能工作。

firebase.json 文件

{
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  "storage": {
    "rules": "storage.rules"
  },
  "hosting": {
    "public": "./public",
    "headers": [
      {
        "source": "**/*.@(js|html)",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "max-age=0"
          }
        ]
      }
    ]
  }
}

firestore.rules

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /messages/{messageId} {
      allow read;
      allow create, update: if request.auth != null
                    && request.resource.data.name == request.auth.token.name
                    && (request.resource.data.text is string
                      && request.resource.data.text.size() <= 300
                      || request.resource.data.imageUrl is string
                      && request.resource.data.imageUrl.matches('https?://.*'));
      allow delete: if false;
    }
    match /fcmTokens/{token} {
      allow read: if false;
      allow write;
    }
  }
}

存储规则

// Returns true if the uploaded file is an image and its size is below the given number of MB.
function isImageBelowMaxSize(maxSizeMB) {
  return request.resource.size < maxSizeMB * 1024 * 1024
      && request.resource.contentType.matches('image/.*');
}

service firebase.storage {
  match /b/{bucket}/o {
    match /{userId}/{messageId}/{fileName} {
      allow write: if request.auth != null && request.auth.uid == userId && isImageBelowMaxSize(5);
      allow read;
    }
  }
}

因此,将这 2 个文件 firestore.rulesstorage.rules 添加到根目录后,部署命令应该可以工作。

答案 2 :(得分:-1)

从firebase.json文件中删除:“ rules”:“ firestore.rules”