В моих запросах на чтение Firestore возникают ошибки. Я считаю, что произошло какое-то неправильное занесение в черный список.
Окружающая среда: развитие
Цель: найти в моей коллекции Firestore документ с именем «auth».
Правила пожарного магазина:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth != null;
}
}
}
Схема пожарного магазина:
Collection name: auth
Document: <email id> eg: [email protected]
Fields: name, role
Код:
let docRef = doc(db, "auth", newUserEmail.value); // <email id>
let docSnap;
try {
docSnap = await getDoc(docRef);
} catch(error) {
console.info("error: ", error);
}
Сообщение об ошибке: ошибка: FirebaseError: разрешения отсутствуют или недостаточны.
Я получаю одно и то же сообщение об ошибке независимо от того, существует ли документ, который я ищу, или нет.
Наконец, я не знаю, как устранить неполадки, поскольку в Firestore нет системы журналирования, доступной разработчикам, и на моей веб-консоли нет флагов.
@DougStevenson Я обновил вопрос, добавив свою схему и дополнительный контекст. Ценю вашу помощь.
Мы по-прежнему не можем видеть значение newUserEmail.value или фактическое содержимое вашей базы данных, которое должно совпадать. Мы также по-прежнему не видим, чтобы пользователь вошел в систему на момент запроса, как того требуют ваши правила.
Немного не по теме, но использование адресов электронной почты в качестве идентификаторов документов может быть проблематичным. адреса электронной почты меняются, и если это произойдет, каждую ссылку на этот документ придется удалить и обновить, а также сам документ придется удалить и перезаписать (DocumentId нельзя изменить). Возможно, строку придется проанализировать, чтобы удалить любое форматирование или недопустимые символы. См. Использование и ограничения Firebase. Часто это сильная боль. Лучше использовать идентификатор пользователя в качестве идентификатора документа, поскольку он статический.
Спасибо @DougStevenson Мой запрос должен работать, даже если пользователь не вошел в систему. Как мне обновить мои правила для поддержки обоих сценариев: когда пользователь вошел в систему и когда пользователь не вошел в систему? newUserEmail.value — это ссылочная переменная Vue.JS, воспринимайте ее как строковое значение.
Пожалуйста, отредактируйте свой вопрос и добавьте информацию, которую запросил Дуг, а также ответьте, используя @.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Основываясь на информации от @Doug, я понял, что мои правила не разрешают запросы от неаутентифицированных пользователей на новых страницах входа/регистрации, и именно здесь возникла проблема.
Я обновил свои правила:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /auth/{document=**} {
allow read, write: if true;
}
}
}
Спасибо за четкое и доходчивое решение вашего вопроса. Добро пожаловать в Stack Overflow!
Сообщение об ошибке сообщает вам, что документ с запрошенным вами именем отсутствует или у пользователя нет разрешения на доступ к нему. Мы не сможем вам помочь, не зная больше. Например, мы не знаем путь к документу, к которому осуществляется доступ (мы не видим значения
newUserEmail.value), а также не можем видеть, что у вас есть документ в коллекции аутентификации с этим идентификатором. Кроме того, мы не можем определить, вошел ли пользователь в систему в момент отправки запроса, поскольку этого определенно требуют ваши правила. Пожалуйста, отредактируйте вопрос, чтобы подробно объяснить, как любой может воспроизвести проблему.