Angular 10-在渲染之前等待服务返回信息

问题描述

我正在尝试对网站实施FusionAuth身份验证,但Chrome和Edge遇到了重大问题,但Firefox却没有。现在,根据响应的正文,它会自动将您重定向到FusionAuth登录页面,或将您定向到导航栏中包含的网站主页。

<ng-container *ngIf="this.loggedIn == false; then thenTemplate; else elseTemplate"></ng-container>
<ng-template #thenTemplate>
    <Meta http-equiv="refresh" content="0; URL=login_url">
</ng-template>
<ng-template #elseTemplate>
    <app-navbar></app-navbar>
</ng-template>

这是收集用户信息的服务。在完成检查的组件中,它检查信息是否包含电子邮件地址,因为所有用户都需要电子邮件。如果有电子邮件,它将“ loggedIn”属性设置为true,否则为false。

export class UserService {

  private SERVER_URL = "serverURL";

  constructor(private httpClient: HttpClient) { }

  handleError(error: HttpErrorResponse) {
    let errorMessage = 'UnkNown error!';
    if (error.error instanceof ErrorEvent) {
      errorMessage = `Error: ${error.error.message}`;
    } else {
      errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;
    }
    window.alert(errorMessage);
    return throwError(errorMessage);
  }

  public get() {
    return this.httpClient.get(this.SERVER_URL,{withCredentials: true}).pipe(catchError(this.handleError));
  }
}

最后,这是支票。我相信问题是在这里发生的:

  user: any;
  loggedIn: boolean;
  constructor(private userService: UserService){}

  ngOnInit(): void{
    this.userService.get().subscribe((data: any) => {
      if(data.email != null){
        this.loggedIn = true;
      }
      else{
        this.loggedIn = false;
      }
    });
  }

这时,Firefox能够以某种方式等待异步请求,但是Chrome正在通过无限的登录重定向发送用户

基本上我的问题是,如何强制Angular等待处理服务请求并继续执行,直到收到所有信息为止?我试图将回应变成承诺并以这种方式返回,但没有运气。

谢谢大家!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)