Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase数据库安全规则,检查resource.data中的auth.email_Firebase_Google Cloud Firestore_Firebase Security - Fatal编程技术网

Firebase数据库安全规则,检查resource.data中的auth.email

Firebase数据库安全规则,检查resource.data中的auth.email,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,错误[firebase.firestore]firebase错误:缺少权限或权限不足 我有一个允许少数用户更新的对象。管理员将设置他们的电子邮件,并允许使用这些电子邮件登录的用户进行更新 以下是我尝试过的规则: allow update: if request.resource.data.managerEmails.val().contains(request.auth.email) && request.resource.data.id == resource.data.id;

错误[firebase.firestore]firebase错误:缺少权限或权限不足

我有一个允许少数用户更新的对象。管理员将设置他们的电子邮件,并允许使用这些电子邮件登录的用户进行更新

以下是我尝试过的规则:

allow update: if request.resource.data.managerEmails.val().contains(request.auth.email) && request.resource.data.id == resource.data.id;

allow update: if request.resource.data.managerEmails.contains(request.auth.email) && request.resource.data.id == resource.data.id;

allow update: if request.resource.data.managerEmails.includes(request.auth.email) && request.resource.data.id == resource.data.id;
要更新的资源:

{
  id: "someid",
  ...fields,
  managerEmails: "abcde@email.com,anothermanager@email.com",
}
正在更新的用户身份验证:

{
  uid: "rSTLnYD9aisyZJHQPC6sg7mlsZh1",
  email: "abcde@email.com",
  ...
}
更新: 使用
request.auth.uid
已经在其他规则中起作用,但是在这种情况下,我不得不使用电子邮件,因为用户可能还没有注册


使用规则,我得到对象上未定义的
属性电子邮件。
可能无法使用
请求.auth.email

我强烈建议做两件事

首先,存储UID而不是电子邮件地址。UID是标识单个Firebase身份验证帐户的首选方式,并且始终保证存在且唯一。电子邮件地址不可用

其次,将用户列表存储为数组类型字段,而不是逗号分隔的字符串。总体而言,这将更容易管理

完成这两件事后,规则变得简单:

allow update: if resource.data.managerUids.hasAny([request.auth.uid]);

我也遇到同样的问题,但从使用firebase.auth.email改为使用firebase.auth.token.email,现在可以使用了。

谢谢您的建议。我需要使用电子邮件,因为这些用户可能还没有在系统中注册(他们的用户还不存在)。我把它改成了你建议的电子邮件数组,而不是逗号分隔的。并将其更改为resource.data.managerEmails.hasAny([request.auth.email]),也不起作用。使用规则,我得到
属性email在对象上未定义。
可能无法使用email?控制台中的模拟器不支持它。您必须编写代码,看看它是否有效。