Я пытаюсь разрешить пользователям читать и писать в мою коллекцию Firestore videoFeedback
из веб-приложения и получаю сообщение об ошибке «Отсутствует или недостаточно разрешений».Как мне убедиться, что мой запрос в Firestore отправляется с правильной аутентификацией пользователя (или любой аутентификацией вообще)?
Это для приложения Angular, использующего Firestore и анонимную аутентификацию Firebase.Я уже настроил анонимного пользователя.Я хотел бы добавить документ в мою коллекцию videoFeedback
из веб-приложения, а не из серверной части.Я уже читал официальные страницы в документации Firestore: Анонимная аутентификация с Firebase Начало работы с аутентификацией Firebase на веб-сайтах и многие другие, плюс прочитайте все вопросы SO по этой теме.
Мой объект Firestore уже настроен правильно (я знаю, потому что я могу читать / писать в БД, если мои правила безопасности не требуют ненулевого request.auth).
Ваша помощь очень высоко ценится.
private db: AngularFirestore;
public initFirebaseApp() {
firebase.initializeApp(this.firebaseConfig);
}
public anonymousAuth() {
firebase.auth().signInAnonymously().catch(function(error) {
console.log("ERROR: " + String(error.errorCode) +
" " + String(error.errorMessage))
});
console.log("User is authorized");
}
this.initFirebaseApp();
this.anonymousAuth();
let date_created = new Date().toLocaleString();
let feedback = {
"feedback": "FAKE_FEEDBACK",
"rating": -1,
'created': date_created,
};
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
console.log(user.uid)
this.db.collection('videoFeedback').add(feedback);
}
}.bind(this));
И мои правила безопасности выглядят так
service cloud.firestore {
match /databases/{database}/documents {
match /videoFeedback/{feedback} {
allow read, write: if request.auth != null;
}
}
}
При такой конфигурации я получаю следующий вывод:
User is authorized
JAZe9dsIMtdyNe2dhndleIcn9nd2
ERROR Error: Uncaught (in promise): FirebaseError: [code=permission-denied]: Missing or insufficient permissions.
FirebaseError: Missing or insufficient permissions.
at new FirestoreError (index.cjs.js:352)
at index.cjs.js:7274
at Y.<anonymous> (index.cjs.js:7219)
...
Когда я заменяю свое правило безопасностис
service cloud.firestore {
match /databases/{database}/documents {
match /videoFeedback/{feedback} {
allow read, write;
}
}
}
Я получаю то же самое, за исключением ошибки разрешений.Это заставляет меня думать, что это проблема способа отправки моего запроса, а не данных, которые я отправляю, или настройки базы данных Firestore.
User is authorized
JAZe9dsIMtdyNe2dhndleIcn9nd2 (or some random string)
Что мне нужно сделать, чтобы отправить свой запрос с ненулевым request.auth.uid?