Angular2 + Auth Guard с базой данных в реальном времени Firebase - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь установить защиту для угловых маршрутов в зависимости от данных пользователя в базе данных реального времени firebase.Я установил привилегию администратора как панель мониторинга: true в разделе базы данных пользователя в реальном времени (, как на этом рисунке ).И я хотел бы дать разрешение на ввод некоторых конкретных маршрутов, только если у пользователя есть свойство dashboard: true в его / ее базе данных.Я попробовал ниже код.Но он всегда перенаправляет на корневой маршрут (localhost: 4200)

    canActivate(): Observable<boolean> {

    return this.firebaseAuth.authState.map(auth => {
      if (auth) {
        this.authService.getUserData(auth.uid).subscribe(userData => {
          if (userData['dashboard'] === true) {
            return true;
          } else {
            this.router.navigate(['/login']);
            return false;
          }
        })
      } else {
        this.router.navigate(['/login']);
        return false;
      }
    });
}

1 Ответ

0 голосов
/ 10 июня 2018
canActivate(): Observable<boolean> {

    return this.firebaseAuth.authState.switchMap(auth => {
        if (auth)
            return this.authService.getUserData(auth.uid).map(userData => {
                if (userData['dashboard'] === true)
                    return true;

                this.router.navigate(['/login']);
                return false;
            });

        this.router.navigate(['/login']);
        return of(false);
    });
}
...