0

我有一个角度应用程序和一个路由守卫。

如果用户在domain.com/login登录时结束,我想将他们转发到另一条路线。

但是,一个用户帐户在 firestore ( admin: true) 中具有“admin”属性。登录后,我会检查 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)
     )
   }
}
4

1 回答 1

0

这对我有用:

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)
  )
}
}
于 2019-04-10T08:00:30.793 回答