Meine Benutzer eine Liste der Helden mögen kann, so habe ich diese Struktur in meinem Feuerbasis Regeln/Daten:Angularfire2: Verschachtelte Observablen auf Auth Änderung und die Erlaubnis verweigert
"user_flags": {
"$uid": {
".write": "auth.uid == $uid",
".read": "auth.uid == $uid",
"liked": {
"$heroIdx": {
".validate": "newData.isString()"
}
}
}
}
In meinem Code ich die abonnieren möchten „mochte Helden“ ref, so dass das, was ich tue:
import { Injectable } from '@angular/core';
import { AngularFireDatabase } from 'angularfire2/database';
import { Observable } from 'rxjs/Observable';
import { AngularFireAuth } from 'angularfire2/auth';
@Injectable()
export class UserFlagsService {
likedHeroes$: Observable<string[]>;
constructor(
private afAuth: AngularFireAuth,
private db: AngularFireDatabase
) {
this.likedHeroes$ = afAuth.authState.flatMap(user => {
return user && user.uid
? this.db.list(`user_flags/${user.uid}/liked`)
.map(heroes => heroes.map(hero => <string>hero.$value))
: Observable.of([])
});
}
}
Alles funktioniert gut, bis der Benutzer abmeldet ... Auch bei der Prüfung auf user
und user.uid
die Abfrage user_flags/MY_ID_HERE/liked
scheint ausgelöst zu werden, und ich bekomme ein " Erlaubnis verweigert".
Ich habe versucht, für signout es abbestellen abonnieren und beobachten zu verwenden, aber hat nicht funktioniert entweder ... Die Abfrage wurde noch ausgelöst und konnte nicht mit „Zugriff verweigert“
Wie soll ich damit umgehen? Ich möchte, dass mein Service ein zuverlässiges Observable liefert, damit ich ihn in meinen Komponenten abonnieren kann.
Vielen Dank für Ihre Hilfe
Es kann auch helfen, den Unterschied zwischen flatMap und switchMap zu beachten, siehe: https://Stackoverflow.com/a/28180793/6288171 – nclarx
Stil nicht bequem mit dem Unterschied zwischen flatMap und switchMap, aber das scheint sehr gut zu funktionieren . Danke – Maslow
Wenn jemand das gleiche Problem mit angularfire2-offline hat, ist die Lösung die Methode 'reset()' zu verwenden, bevor 'this.afAuth.auth.signOut(); 'aufgerufen wird – Maslow