在Angular应用程序中,我有两个非常相似的守卫。首先检查的是用户登录:
// isUser guard
export class isUser implements CanActivate {
constructor(
private fireAuth: AngularFireAuth,
private router: Router
) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
return this.fireAuth.authState.pipe(
take(1),
map(authState => !!authState),
tap(auth => !auth ? this.router.navigate(['/']) : true)
)
}
}
这一个工作正常:当用户没有登录时,不允许他打开受保护的页面。
下一个保护几乎是相同的,但它检查用户是否
不
登录时间:
export class isGuest implements CanActivate {
constructor(
private fireAuth: AngularFireAuth,
private router: Router
) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
return this.fireAuth.authState.pipe(
take(1),
map(authState => !!authState),
tap(auth => auth ? this.router.navigate(['/']) : true)
)
}
}
区别只是:
!auth ? this.router.navigate(['/'])
VS
auth ? this.router.navigate(['/'])
.
但是
isUser
警卫工作良好,以及
isGuest
始终允许用户使用页面。
我做错了什么,为什么不行?