Отсутствуют или недостаточно разрешений с AngularFirestore

# #javascript #angular #google-cloud-firestore #firebase-security #angularfire

Вопрос:

Я получаю следующую ошибку, когда пытаюсь получить форму документа Firestore (angular@12.0.3 и angular/fire@6.1.5):

ОШИБКА FirebaseError: Отсутствуют или недостаточно разрешений.

Согласно руководству firebase, я написал правила для firestore:

 rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /collection/document {
      allow read: if request.auth != null;
      allow write: if false;
    }
  }
}
 

Вот код из моего сервиса:

 constructor(
    private store: AngularFirestore,
    private db: AngularFireDatabase,
    private auth: AuthService
  ) {
    // this.auth.user$ = this.angularFireAuth.user
    this.auth.user$.subscribe(user => {
      if (user amp;amp; user.email) {
        this.store.doc('/collection/document').valueChanges().subscribe(_ => {
          console.log(_); // throws ERROR FirebaseError: Missing or insufficient permissions.
        });

        this.db.list<List>(`lists`, ref => ref.orderByChild('owner').equalTo(user.email))
          .valueChanges([], {idField: 'uuid'})
          .subscribe(_ => {
            console.log(_); // works fine
          })
      }
    });
}
 

Я немного знаком с правилами firebase, поэтому подписка на rtdb работает нормально (с правилами, готовыми к производству). И я могу получать данные из коллекции firestore , если я изменю правила чтения allow read: if true; , но, конечно, я хочу, чтобы правила были более строгими. Таким образом, проблема выглядит так, как будто request.auth в правилах, похоже, равно нулю без достаточных оснований.

Спасибо всем, кто может помочь!

Комментарии:

1. Я предполагаю, что пользователь неправильно вошел в firebase. Пожалуйста, поделитесь своими AuthService .

2. pastie.org/p/0Am4srArAUQygDiu4We4pW Я настроил базовую аутентификацию по электронной почте/паролю. А также у меня есть строгие правила для запросов rtdb, которые содержат проверку электронной почты и uid из request.auth. Но те же правила в firestore не соблюдаются Missing or insufficient permissions

Ответ №1:

Проблема в пакете firebase : https://github.com/angular/angularfire/issues/2838

У меня были те же проблемы после обновления всех моих пакетов (angular 12, angular/fire, firebase) Это было решено, когда я понизил рейтинг пакета fireabase:

нпм i firebase@8.6.1

Комментарии:

1. Боже, большое спасибо! Сейчас это действительно отлично работает

Ответ №2:

Попробуйте внести изменения match /collection/document match /collection/{document} в свое правило.

Комментарии:

1. К сожалению, ничего не изменилось… Я пытался match /collection/{document} и /{document=**} — и все равно получаю ошибку. А также я проверил свои правила на игровой площадке — получил Simulated read allowed с аутентифицированным флагом и Simulated read denied без него.

2. Хммм, как насчет изменения return this.angularFireAuth.user; в return this.angularFireAuth.authState; in get user$() .

3. Нет, снова ничего не изменилось:( Я попробовал некоторые другие специальные решения, такие как установка времени ожидания для запроса firestore или выполнение запроса сразу после аутентификации…