Итак, я знаю, что проверка адреса электронной почты - довольно сложная задача. Я уже написал регулярное выражение, которое проверяет действительный адрес электронной почты. Проблема заключается в написании правила безопасности, поскольку я имею дело с картой в облачном хранилище. Карта выглядит так:
email{
work: ""
personal: ""
}
Проблема заключается в том, что я не могу гарантировать, что заданное значение c будет соответствовать регулярному выражению. Пользователи должны иметь возможность иметь только личный адрес электронной почты, только рабочий адрес электронной почты или и личный, и рабочий адрес электронной почты. Все ситуации должны приводить к подтвержденным адресам электронной почты в firestore.
В настоящее время у меня есть следующий код, но я не могу понять, как работать с такими картами:
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, похоже, не распознает | (ИЛИ) оператор. Есть ли альтернатива этому? Я пытаюсь проверить, является ли электронное письмо действительным или пустым.
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,}$|"")
);
}
Заранее благодарим за помощь!