CanActivate ведет себя не так, как следует с Angular 7 с firebase - PullRequest
0 голосов
/ 23 марта 2019

По моему Authservice, у меня есть:

  getAuthenticationState(): Observable<any> {
    return this.angularFireAuth.authState;
  }

А по моему Guard:

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
        // In case of refresh
        return this.authService.getAuthenticationState()
        .pipe(map(user => !!user))
        .pipe(tap(loggedIn => {
            console.log(loggedIn);
            if (!loggedIn) {
                this.router.navigate(['/admin/login']);
            } else {
                return true;
            }
        }));
    }

Моя проблема в том, что я должен нажать кнопку входа в систему дважды (я уверен, что она реализована так, как должна), кажется, что Guard не работает как Observable, loggedIn значение печатается только один раз.

1 Ответ

1 голос
/ 23 марта 2019

добавьте дубль (1), чтобы решить его, и почему вы используете 2 канала, измените его на

 return this.authService.getAuthenticationState()
    .take(1)
    .pipe(
         map(user => !!user),
         tap(loggedIn => {
            console.log(loggedIn);
           if (!loggedIn) {
              this.router.navigate(['/admin/login']);
           } else {
              return true;
           }
         })
      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...