AuthGuard/AuthenticationService在Angular13应用中无法按预期工作
创始人
2024-09-22 15:00:20
0

首先,我们需要确保在AuthGuard中实现的CanActivate方法返回一个Observable,但有时这可能不起作用,这是因为CanActivate方法可能会同步返回false,从而早于它的返回时间监听器。

因此,我们可以将CanActivate方法返回一个Promise,以确保在完成所有异步任务后调用it,例如:

canActivate(): Promise {
  return new Promise((resolve) => {
    this.authService.isAuthenticated().subscribe((authenticated) => {
      if (authenticated) {
        resolve(true);
      } else {
        this.router.navigate(['/login']);
        resolve(false);
      }
    });
  });
}

其次,我们需要确保每次导航到受保护的页面时都调用AuthService,并且在Auth Service中应该使用BehaviorSubject来跟踪用户的身份验证状态,以便在每次订阅时都能获取最新状态,如下所示:

export class AuthService {
  private isAuthenticatedSubject = new BehaviorSubject(
    this.token != null
  );

  get isAuthenticated(): Observable {
    return this.isAuthenticatedSubject.asObservable();
  }

  login(username: string, password: string): Observable {
    // call login api and set token to localStorage
    this.isAuthenticatedSubject.next(true);
    // return response
  }

  logout(): void {
    // remove token from localStorage
    this.isAuthenticatedSubject.next(false);
  }
}

最后,在AppComponent中,我们需要订阅AuthService的isAuthenticated流,并将其绑定到一个本地属性中,以便在模板中获取用户的身份验证状态。

export class AppComponent {
  isAuthenticated: boolean;

  constructor(private authService: AuthService) {
    this.authService.isAuthenticated.subscribe(
      (authenticated) => (this.isAuthenticated = authenticated)
    );
  }
}

使用这个解决方法,AuthGuard和AuthService应该能够按预期工作,并始终保持同步。

相关内容

热门资讯

2026版总结!hhpoker... 2026版总结!hhpoker脚本下载,德普之星辅助工具如何打开,切实真的是有挂(有挂教程)1、该软...
推出新举措!悦扑克脚本,德普之... 推出新举措!悦扑克脚本,德普之星透视辅助,果然确实有挂(有挂秘诀)亲,关键说明,德普之星透视辅助透视...
今天上午!wepoker辅助器... 今天上午!wepoker辅助器软件下载,德普之星私人局透视,都是是有挂(有挂实锤)1)德普之星私人局...
攻略辅助挂!wpk有辅助器吗,... 攻略辅助挂!wpk有辅助器吗,德普之星透视辅助软件是真的吗,本来存在有挂(新版有挂)亲,关键说明,德...
据目击者称!xpoker辅助助... 据目击者称!xpoker辅助助手,德普之星透视辅助软件下载,一直真的有挂(有挂详情)进入游戏-大厅左...
刚刚!智星菠萝透视,智星德州辅... 刚刚!智星菠萝透视,智星德州辅助译码插件靠谱吗,好像是有挂(的确有挂)进入游戏-大厅左侧-新手福利-...
教学辅助挂!wepokerh5... 教学辅助挂!wepokerh5破解,德普之星app安卓版破解版,都是确实有挂(有挂详情)1、许多玩家...
此事引发网友热议!pokemm... 此事引发网友热议!pokemmo手机版脚本,德普之星透视辅助插件,总是确实有挂(有挂方针)1、完成德...
针对!wepoker怎么挂飞机... 针对!wepoker怎么挂飞机,德扑之星私人局透视,好像是有挂(有挂教学)1、下载好德扑之星私人局透...
据权威媒体报道!aapoker... 据权威媒体报道!aapoker发牌逻辑,德普之星有透视辅助吗,总是真的有挂(详细教程)1、德普之星有...