Как избежать символов в строке в правилах Firestore? - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь проверить, является ли входящая строка электронным письмом, поэтому я написал следующие правила безопасности Firestore:

service cloud.firestore {
    match /databases/{database}/documents {
        match /signups/{uid} {
            // RegExp copied from https://www.regextester.com/19
            allow create: if newData().email.matches("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$");
        }
    }
}

Но когда я разверну его с помощью firebase deploy --only firestore:

=== Deploying to '[my-project-id]'...

i  deploying firestore
i  firestore: checking firestore.rules for compilation errors...
i  firestore: reading indexes from firestore.indexes.json...

Error: Compilation errors in firestore.rules:
[E] 5:139 - Unexpected '['.
[E] 5:149 - Unexpected ']'.
[E] 5:151 - token recognition error at: '?'
[E] 5:171 - Unexpected '['.
[E] 5:183 - token recognition error at: '?'
[E] 8:1 - Unexpected '}'.

Вот скриншот на консоли Firebase:

https://imgur.com/a/LDTvB2K

Очевидно, строка RegExp заканчивается символом ' (5:73). Как я могу избежать строки в правилах Firestore? Я не могу найти документацию по этой проблеме.

1 Ответ

0 голосов
/ 05 мая 2019

Прежде всего, я обнаружил, что ' не заканчивается строкой.Проблема в том, что не удалось избежать \ до ..Я заменил \ на \\, и правила успешно скомпилированы.

allow create: if newData().email.matches("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$");
...