我正在将Firebase Auth(AngularFire)与Angular 6结合使用来构建应用程序。我还具有用于角色库访问(RBA)的MongoDB服务
为了确定用户是否可以访问URL路径,我需要做三件事:
所有3次通过后,它应返回true
我对Observables进行了一些研究,但仍然感到困惑,特别是因为我使用的是rxjs 6,并且很多链接仍引用5.5之前的版本
这是我现在的canActivate函数:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot)
{
return this.authService.user$.pipe(map (user => {
//user.getIdToken() returns a Promise so I wrap it in an Observable
return from(user.getIdToken());
})).pipe(map( tokenValue => {
//tokenValue is an Observable here
this.mongoDBService.validate(tokenValue, state.url);
}));
}
我期望第二个“管道”监听并接收from(user.getIdToken())的结果
这不是应该如何工作的吗?如果没有,有人可以指导我如何将这两个可观察物链接在一起吗?
谢谢
答案 0 :(得分:1)
您需要使用switchMap
(将可观察到的结果链接到主流程中)而不是map
(将发出的值简单地映射到其他内容)。另外,您只能使用一次管道:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.authService.user$.pipe(
switchMap (user => from(user.getIdToken())),
switchMap(tokenValue => this.mongoDBService.validate(tokenValue, state.url))
);
}
我不确定user.getIdToken()
是什么,是否完全需要from
。但是,您的主要问题应通过此方法解决。