Angular authguard firebase id 检查

Angular authguard firebase id checking

我正在尝试进行 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;
    });
  });
}

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

也许 ParamMap 就能满足您的需求。如果您知道密钥,则可以使用 route.paramMap.get('yourkey') 获取它。如果你想遍历请求中的所有参数,你可以将它们作为数组使用:

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

找到解决方案,我使用 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();
}