Вопрос:

Охранник всегда возвращает ложь

angular firebase angularfire2 angular-routing angular-guards

9 просмотра

1 ответ

592 Репутация автора

У меня два довольно похожих охранника в угловом приложении. Первым из них является проверка пользователя, вошедшего в систему:

// isUser guard

export class isUser implements CanActivate {
  constructor(
    private fireAuth: AngularFireAuth,
    private router: Router
  ) {}

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
      return this.fireAuth.authState.pipe(
        take(1),
        map(authState => !!authState),
        tap(auth => !auth ? this.router.navigate(['/']) : true)
      )
  }
}

И это работает правильно: когда пользователь не вошел в систему, он не позволяет ему открыть защищенную страницу.

Следующая защита почти такая же, но она проверяет, не вошел ли пользователь в систему:

export class isGuest implements CanActivate {
  constructor(
    private fireAuth: AngularFireAuth,
    private router: Router
  ) {}

  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
      return this.fireAuth.authState.pipe(
        take(1),
        map(authState => !!authState),
        tap(auth => auth ? this.router.navigate(['/']) : true)
      )
  }
}

Разница только: !auth ? this.router.navigate(['/'])против auth ? this.router.navigate(['/']).

Но isUserохранник работает хорошо, и isGuestвсегда блокирует страницу для пользователя. Что я сделал не так, и почему это не может работать?

Автор: Vladimir Humeniuk Источник Размещён: 11.08.2019 08:05

Ответы (1)


0 плюса

564335 Репутация автора

Значение , излучаемое оба наблюдаемых одно и то же: !!authState.

map()и tap()делать разные вещи.

map() превращает испущенное событие во что-то другое.

tap() производит побочный эффект и оставляет испущенное событие как есть.

Автор: JB Nizet Размещён: 11.08.2019 08:10
Вопросы из категории :
32x32