问题描述
嗨,我有Firebase项目,当我创建数据库时,我创建了一些测试规则。 现在,它们到期了,并且它们关闭了我的项目。 这是我第一次使用Firebase项目,但我没有经验。我将向您展示如何为Cloud Firestore和实时数据库定义规则。 该项目是一个用户可以在其中注册并留下评论的应用程序。 我应该如何设置数据库规则以确保安全? 我应该如何编写规则代码? 我缺席了几天,他们从Google给我写信,而Google在两天内关闭了我的项目。我一直在寻找信息,但是我不知道如何创建规则,使它们正确无误,并且我的项目也能正常工作
我编辑我的问题以添加详细信息
Firebase向我显示的警报如下:
“其安全规则被定义为公共规则,因此任何人都可以从其数据库中窃取,修改或删除数据。”
数据库为空,因此尚无记录。
你能帮我吗?如果我没有正确编写规则,Firebase将关闭我的项目,这些规则不应该公开。
我读了documentation that Firebase offers,但我不太了解如何创建规则。
// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read,write: if request.auth != null;
}
}
}
另一方面,它们显示以下规则:
**// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read,write: if true;
}
}
}**
我不知道应该使用哪一个,以及如何编写它们,以便用户在我的React Native应用程序中留下反馈。
你能帮我吗?
//REALTIME DATABASE
{
"rules": {
".read": true,".write": true
}
}
//CLOUD FIRESTORE
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// This rule allows anyone with your database reference to view,edit,// and delete all data in your Firestore database. It is useful for getting
// started,but it is configured to expire after 30 days because it
// leaves your app open to attackers. At that time,all client
// requests to your Firestore database will be denied.
//
// Make sure to write security rules for your app before that time,or else
// all client requests to your Firestore database will be denied until you Update
// your rules
match /{document=**} {
allow read,write: if request.time < timestamp.date(2020,9,2);
}
}
}
解决方法
您可以使用以下规则,只有经过身份验证的用户才能写入和读取数据库。
对于Cloud Firestore:
// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read,write: if request.auth != null;
}
}
}
对于实时数据库:
// Only authenticated users can access/write data
{
“rules”: {
“.read”: “auth != null”,“.write”: “auth != null”
}
}
,
从经验上讲,保护数据的主要方法有两种:
- 在文档中设置一个字段,例如“ userID”,并且仅当auth.uid值与此字段匹配时才允许CRUD。
- 使用cloud firestore的collection-document-collection性质,并编写一条规则,允许用户对自己所有的收藏进行CRUD。例如
match /users/{userID}{
allow read: if request.auth.uid ==userID;
allow write: if request.auth.uid == userID;
match /userDocs/{docID}{
allow read: if request.auth.uid == userID;
allow write: if request.auth.uid == userID;
}
}
,
理想情况下,您只需要允许经过身份验证的用户访问资源。从您上面的代码
{
"rules": {
".read": true,".write": true
}
}
以上内容将允许任何人甚至对未经身份验证的用户读写数据库。
对于Firestore,您可以看到规则指出,只有在未经过日期(2020,9,2)的情况下,才应允许对Cloud Firestore进行完全特权读取和写入
访问链接To learn more about firebase database rules
然后访问
to learn about firestore rules
您可以为您的用户使用Firebase身份验证,然后通过身份验证的用户可以访问数据库。