У меня есть следующее правило Firebase:
match /PendingInvites/{inviteID} {
allow read: if request.auth != null &&
isInviteForUser(database, inviteID);
}
и следующие функции:
function isInviteForUser(database, inviteID) {
let dataItem = get(/databases/$(database)/documents/PendingInvites/$(inviteID)).data;
return (dataItem.userPhone == request.auth.token.phone_number) ||
(dataItem.userEmail == request.auth.token.email);
}
Тестирование коллекции с использованием онлайн-теста роли работает, я проверяю, используя настоящие документы и со значениями userPhone и userEmail (совпадающими и не совпадающими). Все работает, как ожидалось, отрицая значения несоответствия и разрешая совпадающие значения.
Вот где это становится странным. Когда я запускаю этот (Android) запрос:
val companyMemberDocuments = Firebase.firestore.collection("PendingInvites").whereEqualTo("userPhone", firebaseAuth.currentUser!!.phoneNumber).whereEqualTo("userEmail", firebaseAuth.currentUser!!.email).get().await()
, я получаю «PERMISSION_DENIED: Отсутствуют или недостаточны разрешения». Насколько я понимаю правила, думаю, это должно сработать. Он работает в онлайн-консоли, я специально запрашиваю userPhone (или userEmail), но это не работает.
Я пробовал удалить userEmail и тестировал только userPhone, но это тоже не работает. работа.
Есть идеи, как я могу исправить правила (или запрос)?
Спасибо
Документ:
Токен аутентификации, использованный при тестировании:
{
"uid": "",
"token": {
"sub": "",
"aud": "certifly-global",
"phone_number": "+16505551234",
"firebase": {
"sign_in_provider": "phone"
}
}
}
Документ
Обратите внимание на то, как документ включает ОБА, userPhone и userEmail