# #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;
inget user$()
.3. Нет, снова ничего не изменилось:( Я попробовал некоторые другие специальные решения, такие как установка времени ожидания для запроса firestore или выполнение запроса сразу после аутентификации…