У меня есть такой метод подписки, и он работает нормально.
setOnboardingUser(uid: string): void {
this.currentUserUid = uid;
combineLatest([this.getProfile(uid), this.getUserFirstName(uid), this.getUserLastName(uid)]))
.subscribe(([res1, res2, res3]) => {
this.OnboardingUser = res1;
this.userFirstName = res2.firstName;
this.userLastName = res3.lastName;
}, err => { console.log(err); }); // it throws error here when signout
}
Но когда пользователь вышел из системы, он показывает ошибки разрешения Firestore. то есть у меня есть правила на Firestore
Я могу избежать этого, если я использую оператор first()
, как это. Но так как мне нужно постоянное обновление пользовательского интерфейса, я не могу использовать first()
. Можете ли вы сказать мне, как это сделать? т.е. избежать ошибок разрешений правил при выходе?
setOnboardingUser(uid: string): void {
this.currentUserUid = uid;
combineLatest([this.getProfile(uid), this.getUserFirstName(uid), this.getUserLastName(uid)]).pipe(first())
.subscribe(([res1, res2, res3]) => {
this.OnboardingUser = res1;
this.userFirstName = res2.firstName;
this.userLastName = res3.lastName;
}, err => { console.log(err); });
}
Ошибка разрешения:
FirebaseError: Missing or insufficient permissions.
at new FirestoreError (http://localhost:8100/vendor.js:101053:28)
at JsonProtoSerializer.push../node_modules/@firebase/firestore/dist/index.cjs.js.JsonProtoSerializer.fromRpcStatus (http://localhost:8100/vendor.js:116278:16)
at JsonProtoSerializer.push../node_modules/@firebase/firestore/dist/index.cjs.js.JsonProtoSerializer.fromWatchChange (http://localhost:8100/vendor.js:116791:44)
at PersistentListenStream.push../node_modules/@firebase/firestore/dist/index.cjs.js.PersistentListenStream.onMessage (http://localhost:8100/vendor.js:112588:43)
at http://localhost:8100/vendor.js:112517:30
at http://localhost:8100/vendor.js:112557:28
at http://localhost:8100/vendor.js:102396:20
at ZoneDelegate.invoke (http://localhost:8100/polyfills.js:3594:26)
at Object.onInvoke (http://localhost:8100/vendor.js:71855:33)
at ZoneDelegate.invoke (http://localhost:8100/polyfills.js:3593:52)
signOut
async signOut(): Promise<void> {
return await this.afAuth.auth.signOut();
}