Angular authguard firebase id检查

时间:2017-04-25 15:58:14

标签: angular firebase firebase-realtime-database angularfire2

我正在尝试进行404 authguard检查。如果数据库中不存在id,您将被重定向到404路由。

但由于某种原因,快照中的条件从未加载,并且authguard会自动将您重定向到主路径。

以下是代码:

canActivate(route:ActivatedRouteSnapshot){
  this.route.params.map(key=>{
    return this.af.database.object('heroes/'+key).first().subscribe(snap => {
      if(snap){
        console.log(true);
        return true;
      }
        console.log(false);
        return false;
    });
  });
}

2 个答案:

答案 0 :(得分:0)

您不能将map()params一起使用,params不是数组,也不是Observable,而是对象。您可以将map()ActivatedRoute一起使用,因为它返回一个Observable,但快照将返回固定值,而不是流。另请注意,您使用的是this.route而不是route。如果它没有抛出错误,可能你在守卫中有另一个route

您可以使用ParamMap获得所需内容。如果您知道密钥,则可以使用route.paramMap.get('yourkey')获取密钥。如果要迭代请求中的所有参数,可以使用以下命令将它们作为数组:

route.paramMap.keys.map(key => { ... });

答案 1 :(得分:0)

找到解决方案,我使用this.route(有2条路线)而不是只是访问参数来获取密钥。 另外我使用的是subscribe而不是map(虽然在这种情况下我并不真正理解map和subscribe之间的区别)但是由于某些原因,使用subscribe访问snap并返回true并没有工作。

canActivate(route:ActivatedRouteSnapshot){
  return this.af.database.object('heroes/'+route.params.key).map(snap => {
    if(snap.name){
      return true;
    }
      this.router.navigate(['404']);
      return false;
  }).first();
}