因此,我知道电子邮件验证是一件非常困难的事情。我已经写了一个正则表达式,检查一个有效的电子邮件地址。问题是编写安全规则,就像我在处理云防火墙中的地图一样。地图看起来是这样的:
email{
work: ""
personal: ""
}问题是,我不能保证一个特定的值将匹配正则表达式。用户应该只有一封个人邮件,一封工作邮件,或者一封个人邮件和一封工作邮件。在所有的情况下,都应该在防火墙中产生有效的电子邮件附件。
我目前有以下代码,但我不知道如何处理这样的地图:
match /organisations/{orgID}/people/{userID} {
allow create: if(request.resource.data.email.matches(^[A-Za-z0-9]{3,}[@]{1}[A-Za-z0-9]{3,}[.]{1}[A-Za-z0-9]{3,}$) == true);
}只有一条安全规则就能做到这一点吗?如果是,怎么做?如果没有,我该怎么做呢?如果可能的话,我宁愿使用安全规则而不是编写云函数。
我目前有类似的情况,但是我得到了一个错误,因为firebase似乎不认识\\ (OR)操作符。有没有其他办法可以这样做?我正在尝试测试电子邮件是有效的还是无效的。
match /organisations/{orgID}/people/{userID}{
allow create: if(
request.resource.data.email.work.matches(^[A-Za-z0-9.]{3,}[@]{1}[A-Za-z0-9.]{3,}[.]{1}[A-Za-z0-9.]{3,}$|"")
);
}提前感谢您的帮助!
发布于 2020-08-03 14:38:05
这里有两个截然不同的问题。它们之间没有直接的联系。我会尝试分别处理这些问题。
这个问题是写安全规则,因为我正在处理云火药库中的地图。
如果要在map字段中使用嵌套字段的值,只需使用点表示法即可:
request.resource.data.email.work
request.resource.data.email.personal问题在于,我不能保证一个特定的值将与正则表达式匹配。用户应该只有一封个人邮件,一封工作邮件,或者一封个人邮件和一封工作邮件。
您需要编写逻辑来分别检查每个映射字段。你不能同时检查地图的所有字段。
https://stackoverflow.com/questions/63230548
复制相似问题