可能是因为路由守卫中间件的触发条件未被满足,即返回到它时返回值为 false。为了确保正确的触发条件,可以在路由守卫方法中使用异步代码。以下是一段示例代码:
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable | boolean {
return this.authService.isAuthenticated().pipe(
tap(authenticated => {
if (!authenticated) {
this.router.navigate(['/login']);
}
})
);
}
在此示例中,canActivate
方法将返回一个可以观察的布尔值或布尔值。它使用 AuthService
中的 isAuthenticated()
方法来异步检查用户是否已经通过验证,然后使用 tap
运算符以提供两个处理程序之一。如果用户未通过验证,则 tap
运算符将导航到登录页面。否则,路由守卫将继续通过。