Angular / Firestore-登录屏幕的路线防护-是否可以检查正在尝试访问路线的用户?

时间:2019-04-09 16:48:42

标签: angular google-cloud-firestore angular-route-guards

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

如果用户登录后最终到达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)
     )
   }
}

1 个答案:

答案 0 :(得分: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)
  )
}
}