在 Angular 应用中,当使用 Auth Service 进行身份验证验证时,有时会出现“too many calls”的问题。这是因为 Auth Service 会在每次 URL 更改时检查用户身份验证状态,这意味着如果 URL 更改得太频繁,就会导致大量调用和网络负载。
解决方法是减少对 Auth Service 的调用次数,可以通过在路由器配置中禁用自动导航以及在每次导航时手动调用身份验证服务来实现。下面是相应的示例代码:
在路由器配置中禁用自动导航:
@NgModule({
imports: [RouterModule.forRoot(routes, {
initialNavigation: 'disabled', // 禁用自动导航
scrollPositionRestoration: 'enabled'
})
],
exports: [RouterModule]
})
export class AppRoutingModule { }
在每次导航时手动调用身份验证服务:
@Injectable()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable | Promise | boolean {
// 调用身份验证服务
return this.authService.checkLogin().pipe(
map((isLoggedIn: boolean) => {
if (!isLoggedIn) {
this.router.navigate(['/login']);
}
return isLoggedIn;
})
);
}
}
通过禁用自动导航并手动调用身份验证,可以减少 Auth Service 的调用次数并提高应用程序的性能。