Как отправить запрос Firestore с request.auth! = Null с аутентификацией Firebase? - PullRequest
1 голос
/ 12 июля 2019

Я пытаюсь разрешить пользователям читать и писать в мою коллекцию 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?

...