Запросы Firestore выдают ошибку со статусом: FirebaseError: отсутствуют или недостаточны разрешения

В моих запросах на чтение 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 нет системы журналирования, доступной разработчикам, и на моей веб-консоли нет флагов.

Сообщение об ошибке сообщает вам, что документ с запрошенным вами именем отсутствует или у пользователя нет разрешения на доступ к нему. Мы не сможем вам помочь, не зная больше. Например, мы не знаем путь к документу, к которому осуществляется доступ (мы не видим значения newUserEmail.value), а также не можем видеть, что у вас есть документ в коллекции аутентификации с этим идентификатором. Кроме того, мы не можем определить, вошел ли пользователь в систему в момент отправки запроса, поскольку этого определенно требуют ваши правила. Пожалуйста, отредактируйте вопрос, чтобы подробно объяснить, как любой может воспроизвести проблему.

Doug Stevenson 29.09.2023 18:56

@DougStevenson Я обновил вопрос, добавив свою схему и дополнительный контекст. Ценю вашу помощь.

user6434902 30.09.2023 13:43

Мы по-прежнему не можем видеть значение newUserEmail.value или фактическое содержимое вашей базы данных, которое должно совпадать. Мы также по-прежнему не видим, чтобы пользователь вошел в систему на момент запроса, как того требуют ваши правила.

Doug Stevenson 30.09.2023 14:56

Немного не по теме, но использование адресов электронной почты в качестве идентификаторов документов может быть проблематичным. адреса электронной почты меняются, и если это произойдет, каждую ссылку на этот документ придется удалить и обновить, а также сам документ придется удалить и перезаписать (DocumentId нельзя изменить). Возможно, строку придется проанализировать, чтобы удалить любое форматирование или недопустимые символы. См. Использование и ограничения Firebase. Часто это сильная боль. Лучше использовать идентификатор пользователя в качестве идентификатора документа, поскольку он статический.

Jay 30.09.2023 16:25

Спасибо @DougStevenson Мой запрос должен работать, даже если пользователь не вошел в систему. Как мне обновить мои правила для поддержки обоих сценариев: когда пользователь вошел в систему и когда пользователь не вошел в систему? newUserEmail.value — это ссылочная переменная Vue.JS, воспринимайте ее как строковое значение.

user6434902 30.09.2023 17:07

Пожалуйста, отредактируйте свой вопрос и добавьте информацию, которую запросил Дуг, а также ответьте, используя @.

Alex Mamo 01.10.2023 08:03
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
6
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основываясь на информации от @Doug, я понял, что мои правила не разрешают запросы от неаутентифицированных пользователей на новых страницах входа/регистрации, и именно здесь возникла проблема.

Я обновил свои правила:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /auth/{document=**} {
      allow read, write: if true;
    }
  }
}

Спасибо за четкое и доходчивое решение вашего вопроса. Добро пожаловать в Stack Overflow!

Conspicuous Compiler 02.10.2023 21:38

Другие вопросы по теме