标签: firebase-security-rules

(Firebase)Firestore安全规则-允许在不使用自定义令牌的情况下验证电子邮件吗?

是否可以检查Firestore安全规则中是否验证了请求用户的电子邮件?

就像是:

function isEmailVerified() {
  return request.auth.emailVerified == true;
}
Run Code Online (Sandbox Code Playgroud)

firebase google-cloud-firestore firebase-security-rules

3
推荐指数
1
解决办法
1213
查看次数

以Firebase用户身份使用Node.js访问Firebase存储

我想验证Firebase存储规则在自动Node.js测试中是否按预期工作。

可以使用Firebase Admin API或服务帐户访问Firebase存储桶,如使用Node.js将文件上传到Firebase存储中所述

问题在于,使用Admin API或服务帐户会绕过存储规则。

由于Firebase Node.js API不包含firebase.storage功能,因此没有以给定的Firebase用户访问Firebase存储的明显方法。

简而言之,如何以给定的Firebase用户/ uid从Node.js访问Firebase存储?

node.js firebase firebase-storage firebase-security-rules

3
推荐指数
1
解决办法
426
查看次数

如何使用Firestore的安全规则验证数组值?

我有一个创建以下JSON结构的表单。

{  
   "reviewed":false,
   "title":"Just a title",
   "user":"UYV9TRKXfNW1NeCyFyfjZfagJ8B",
   "items":[  
      {  
         "age":"33",
         "experience":"Newcomer",
         "image":"https://image-url",
         "job":"Nerd",
         "name":"Testname",
         "party":"AAA",
         "type":"person"
      },
      {  
         "age":"33",
         "experience":"Newcomer",
         "image":"https://image-url",
         "job":"Informatiker",
         "name":"Testname",
         "party":"AAA",
         "type":"person"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

如何使用Firestore的安全规则检查“项目”的值?有没有一种方法可以循环/迭代数组?

firebase google-cloud-firestore firebase-security-rules

3
推荐指数
2
解决办法
1150
查看次数

resource.data.size()如何在Firestore规则(被计算在内)中工作?

TLDRrequest.resource.data.size()在将一些布尔值和嵌套对象写入文档时,firestore规则中有什么内容?不知道该文档的意思是“ 条目在地图”(https://firebase.google.com/docs/reference/rules/rules.firestore.Resource#datahttps://firebase.google.com/docs/ reference / rules / rules.Map)和我的假设在规则模拟器中测试时似乎是错误的(与相似的问题request.resource.data.keys().size())。


较长的版本:在Firestore规则中遇到问题,该规则无法按预期更新数据(尽管在规则模拟器中进行了类似的测试)。缩小了问题的指向范围,可以看出它是检查request.resource.data.size()等于某个数字的规则。

传递给firestore update函数的数据示例如下

 Object {
   "parentObj": Object {
     "nestedObj": Object {
       "key1": Timestamp {
         "nanoseconds": 998000000,
         "seconds": 1536498767,
       },
     },
   },
   "otherKey": true,
 }
Run Code Online (Sandbox Code Playgroud)

时间戳是通过生成的firebase.firestore.Timestamp.now()。这在规则模拟器中似乎可以正常工作,但是在执行时对于实际数据却不行

let obj = {}
obj.otherKey = true
// since want to set object key name dynamically as nestedObj value,
// see /sf/answers/3310730671/
obj.parentObj = {} // needed for adding nested dynamic keys …
Run Code Online (Sandbox Code Playgroud)

google-cloud-firestore firebase-security-rules

3
推荐指数
1
解决办法
1237
查看次数

Firebase规则:如何阻止匿名访问?

阅读Firebase规则文档对于如何阻止匿名访问特定集合或文档我一无所获。

换句话说,我要阻止未登录的用户,并且我也要阻止以匿名身份登录的用户。我只允许用户以自己的身份登录(通过电子邮件,Facebook,Google,SMS等)。

我怎样才能做到这一点?

这是我想出的代码,不起作用:

    service cloud.firestore {
      match /databases/{database}/documents {
        }
        match /collectionExample/{documentExample} {
          allow create: if request.auth.uid != null && request.auth.token.isAnonymous != false;              
          allow read: if request.auth.uid == resource.data.userId;
        }
      }
    } 
Run Code Online (Sandbox Code Playgroud)

firebase google-cloud-firestore firebase-security-rules

3
推荐指数
1
解决办法
421
查看次数

Firestore安全规则-通配符集合名称?

我有一组名称都以ABC开头的集合,我想编写一条适用于所有集合的规则,无论ABC后面是什么。就像是:

match /ABC*/{anyid} {
  allow read, write;
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?在“规则控制台”中,没有突出显示语法错误,但是“模拟器”不允许我使用以下方式访问表:

GET /ABC123/456
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

google-cloud-firestore firebase-security-rules

3
推荐指数
1
解决办法
110
查看次数

用于阵列操作的Cloud Firestore安全规则

我试图将对Firestore的某些操作限制为创建或附加到数组。我应该怎么做?我怎样才能辨别arrayUnion()arrayDelete()?将数组操作与所有其他操作区分开来怎么办?

更新:到目前为止,从我深入研究Firestore API所得的信息来看,我猜测可能可以进行某些操作allow create, FieldValue.arrayUnion: if true,但是我尚未对其进行测试,将在测试时进行更新。

firebase google-cloud-firestore firebase-security-rules

3
推荐指数
1
解决办法
500
查看次数

是否可以使用Firebase的Firestore设置存储规则?

因此,我试图将规则设置到存储中,但是我需要访问firestore才能对其进行正确设置。

这是我的示例:

在我的firestore数据库中,我有一个users集合,其中有一个名为的集合items。路径如下所示:/users/items/{itemId}

我希望用户可以使用以下路径将文件读写到存储中:/items/{id}/file.png仅当{id}该项目的已存在于itemsFirestore数据库集合中时。有没有办法使用firestore将规则正确设置到存储中?

我尝试了这个:

service firebase.storage {
  match /b/{bucket}/o {
    match /items/{item}/{allPaths=**} {
        allow read, write: if exists(/databases/{database}/documents/users/$(request.auth.uid)/items/$(item));
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用:/

谢谢你的帮助!

firebase google-cloud-firestore firebase-security-rules

2
推荐指数
1
解决办法
668
查看次数

Firestore-公司内用户的安全规则

我们当前的Firestore结构如下: 在此处输入图片说明

  • 目前,我们没有使用任何子集合
  • 用户具有他们所属公司的列表
  • 每个项目仅与1家公司关联
  • 项目属于公司,当在companyId字段中写入公司UID时

我的第一个问题是如何指定该数据库定义的安全规则?有一些最佳实践方法吗?

我们的第一个想法是这样做:

match /databases/{database}/documents/projects/{projectUid}/{document=**} {
allow read: if 
(/databases/$(database)/documents/projects/$(projectUid)/companyId) === 
(/databases/$(database)/documents/users/$(request.auth.uid)/companyId)
}
Run Code Online (Sandbox Code Playgroud)

但是根据文档,这意味着我们每个读取基本上需要3个读取(2个安全性查询和1个从DB实际读取)。这似乎是对查询的浪费。

有没有比这更好的方法了?我们正在考虑更改子集合:

  • 最后,我们将在根集合“ companies”和“ users”中存储所有用户的详细信息
  • 项目将是公司的子集合
  • 页面将是项目的子集合
  • ...等等
  • 并且公司将包含用户列表(而不是像现在这样)-但仅包含列表,而不包含用户详细信息

这样,我们可以使用与文档中类似的方法,其中每个匹配项都包含{companyId},在allow语句中,我们将使用类似

match /databases/{database}/documents/companies/{companyId}/projects/{projectId} {
    allow read: if
    exists(/databases/$(database)/documents/companies/$(companyId)/users/$(request.auth.uid));
}
Run Code Online (Sandbox Code Playgroud)

感谢您提供有关如何以最可扩展且最安全的方式构建它的任何建议。

firebase google-cloud-firestore firebase-security-rules

2
推荐指数
1
解决办法
580
查看次数

Firestore安全规则-如何为字段名称使用变量?

如果我的文档保存在/recordTypeX/{autoKey},结构如下:

memberUserIds [object]
  hjfjkh32390u09j: true
  kjsklfjkslfklj3: true
  ....
  skfksdjk2249fks: true
someStringField: "Bork, bork, bork!"
someNumericField: 88
Run Code Online (Sandbox Code Playgroud)

如何编写安全规则以检查是否存在memberUserIds?我尝试了以下操作,但是CLI不喜欢该语法。

allow read if resource.data.memberUserIds.$(request.auth.uid) == true;

我知道变量可以在get()和的路径中使用exists(),因此我认为也可以使用变量寻址字段,但是我无法克服语法错误。这可能吗?

在某些背景下,我试图在集合中的每个文档上维护一个(小)userId列表,以便我可以进行查询,以使我可以检索当前用户所属的集合中的所有文档。

我在阅读了Firebase文档中曾经使用过的指南(称为列表,集合和数组)后,采用了这种方法。

感谢您的任何想法。

firebase google-cloud-firestore firebase-security-rules

2
推荐指数
1
解决办法
1476
查看次数