Firebase数据库安全规则,检查resource.data中的auth.email
错误[firebase.firestore]firebase错误:缺少权限或权限不足 我有一个允许少数用户更新的对象。管理员将设置他们的电子邮件,并允许使用这些电子邮件登录的用户进行更新 以下是我尝试过的规则: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;
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?控制台中的模拟器不支持它。您必须编写代码,看看它是否有效。