Firebase中的数据具有以下结构:
emailsLending
|___-LqQFYK-iI8a8qe2msVk
|___email
|___serverTimestamp
我编写了以下规则来检查电子邮件字段中的条目:
{
"rules": {
"emailsLending": {
"$emailsLending_id": {
".indexOn": "email",
"email": {
".validate": "newData.isString() && newData.val().matches(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i)"
}
}
}
}
}
但是当我使用Cloud Function将数据写入电子邮件字段时,该规则不适用,并且我可以写入任何内容,例如“ 123”。
我在做什么错了?
答案 0 :(得分:0)
Cloud Functions以管理特权运行,并且默认情况下绕过数据库的安全规则。
这里的逻辑是,规则应防止不受信任的用户进行恶意行为,而Cloud Functions是由最受信任的用户(即应用程序上的协作者)创作的。为了发现这些类型的用户所犯的错误,通常使用单元测试代替安全规则。
如果在这种情况下该逻辑不适用,并且您正在使用实时数据库,则可以将databaseAuthVariableOverride
设置为用户的UID来运行代码。有关此示例,请参阅accessing user authentication information上的Firebase文档。