Eckige 4 - canActivate beobachtbaren nicht aufgerufen werden

Bin ich versucht zu implementieren canActivate im Winkel 2/4 mit RxJS observablen. Ich habe schon gelesen eine andere Frage auf dieser. Mit dem folgenden code, der meine canActivate Methode funktioniert nur einmal, wenn die app startet, aber hello ist nie wieder gedruckt, wenn die isLoggedIn beobachtbaren löst neue Werte.

canActivate(): Observable<boolean> {
  return this.authService.isLoggedIn().map(isLoggedIn => {
    console.log('hello');
    if (!isLoggedIn) {
      this.router.navigate(['/login']);
    }
    return isLoggedIn;
  }).first();
}

oder diese version ist nicht so gut funktioniert:

canActivate(): Observable<boolean> {
  return this.authService.isLoggedIn().map(isLoggedIn => {
    console.log('hello');
    if (isLoggedIn) {
      this.router.navigate(['/']);
    }
    return !isLoggedIn;
  });
}

Aber es funktioniert gut mit diesem code:

canActivate(): Observable<boolean> {
  return Observable.create(obs => {
    this.authService.isLoggedIn().map(isLoggedIn => {
      console.log('hello');
      if (isLoggedIn) {
        this.router.navigate(['/']);
      }
      return !isLoggedIn;
    }).subscribe(isLoggedIn => obs.next(isLoggedIn));
  });
}

Was mache ich falsch, im ersten Stück code ?

EDIT: hier ist der isLoggedIn Umsetzung

@LocalStorage(AuthService.JWT_TOKEN_KEY)
private readonly token: string;
private tokenStream: Subject<string>;

public isLoggedIn(): Observable<boolean> {
  if (!this.tokenStream) {
    this.tokenStream = new BehaviorSubject(this.token);
    this.storage.observe(AuthService.JWT_TOKEN_KEY)
      .subscribe(token => this.tokenStream.next(token));
  }
  return this.tokenStream.map(token => {
    return token != null
  });
}

verwendet ngx-webstorage. und RxJS BehaviorSubject.

InformationsquelleAutor user5365075 | 2017-06-22
Schreibe einen Kommentar