我有一个角度应用程序和一个路由守卫。
如果用户登录后最终到达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)
)
}
}
答案 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)
)
}
}