我尝试使用Firebase作为主机时部署网站,并删除了firestore.rules
文件,因为我不认为我需要使用Cloud Firestore数据库(我只是为现在)。
我已经按照their documentation中所述的所有步骤进行操作。
运行firebase deploy
时出现错误:
Error: Error reading rules file firestore.rules
我不知道该如何超越。有人可以帮我解决这个问题吗?谢谢!
答案 0 :(得分:0)
转到您的 Firebase Console
,然后从侧边栏中的 Cloud Firestore
类别中单击 Build
。
您可以在屏幕顶部(Cloud Firestore 标题下方)看到一个 Rules
标签。打开 Rules
标签。现在,您可以看到当前处于活动状态的规则以及到目前为止您已部署的所有其他规则(通过 CLI 或 Firebase 控制台)。
您可以从此处复制规则并将其粘贴到项目文件夹中名为 firestore.rules
的文件中。
如果您为 firestore.rules
文件中的 firebase.json
设置了错误的路径(例如将文件移动到子文件夹)或者您没有 {{1 }} 文件,但在 firestore.rules
中引用它。
从 Firebase 项目文件夹中打开 firebase.json
文件。你可以在这个文件中找到一些路径和文件名。
查找 firebase.json
类别。它应该类似于:
firestore
您可能想要更新您的路径或文件名以匹配您的 "firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
所在的位置。
如果您找不到 firestore.rules
的任何路径,您可以将它们添加到您的 firestore
文件中。它现在可能看起来像这样(注意:我已经移动了我的 Firestore 文件并更改了 firebase.json
和 firestore.rules
的路径):
firestore.indexes.json
如果您想在 {
"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 Console
和 firestore.rules
文件并删除 firestore.indexes.json
部分来自您的 firestore
。虽然我建议将它们保存在您的项目文件夹中,以便您可以在您的版本控制系统中跟踪它们。
请记住,您也可以删除 firebase.json
文件中未通过 CLI 部署 firebase.json
的引用,并保留 rules
和 firestore.rules
文件。
如果您不想通过 CLI 部署 Firestore 规则,请删除它:
firestore.indexes.json
答案 1 :(得分:0)
如果您正在学习本教程
https://firebase.google.com/codelabs/firebase-web#14 那么这里的问题是当您尝试部署运行此命令 firebase deploy --except functions
时,此脚本将尝试在根目录中查找带有 firestore.rules
和 storage.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.rules
和 storage.rules
添加到根目录后,部署命令应该可以工作。
答案 2 :(得分:-1)
从firebase.json文件中删除:“ rules”:“ firestore.rules”