CanActivate的行为不正常,与带有Firebase的Angular 7一样

时间:2019-03-23 12:40:58

标签: angular typescript firebase-authentication angularfire2 angular7

在我的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 个答案:

答案 0 :(得分:1)

添加take(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;
           }
         })
      );