Angular / Firestore - Защита маршрута для экрана входа в систему. Можно ли проверить пользователя, пытающегося получить доступ к маршруту? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть угловое приложение и охранник маршрута.

Если пользователь подключается к domain.com/login, когда он вошел в систему, я бы хотел переслать его на другой маршрут.

Однако одна учетная запись пользователя имеет атрибут 'admin' в firestore (admin: true).После входа в систему я проверяю login.component.ts, чтобы увидеть, существует ли этот узел Firestore в учетной записи пользователя.Если это так, я пересылаю их в админ-панель.Если это не так, то это означает, что это клиент, который входит и перенаправляет их на другой компонент.

Однако проблема, с которой я столкнулся на данный момент, заключается в том, что я не уверен, как перенаправить пользователяк соответствующему компоненту, если они окажутся на экране входа в систему при входе в систему .Ниже мой охранник пока.Как видите, в навигационной системе маршрутизатора есть вопросительный знак, поскольку я не уверен, как определить, является ли он администратором.

export class LoginGuardService implements CanActivate {

   constructor(
     private router: Router,
     private auth: AngularFireAuth
   ) { }

   canActivate(): Observable<boolean> {
     return this.auth.authState.pipe(
       map(authState => {
         if (authState) {this.router.navigate(['/?']);}
         return !authState;
       }),
       take(1)
     )
   }
}

1 Ответ

0 голосов
/ 10 апреля 2019

Мне удалось работать:

export class LoginGuardService implements CanActivate {

constructor(
  private router: Router,
  private auth: AngularFireAuth
) { }

canActivate(): Observable<boolean> {
  return this.auth.authState.pipe(
    map(authState => {
      if (authState && authState.email.endsWith('@domain.com')) {
        this.router.navigate(['/admins']);
      } else {
        if (authState ) {
          this.router.navigate(['clients']);
        }
      }
      return !authState;
    }),
    take(1)
  )
}
}
...