2017-04-25 27 views
0

我试图做一个404 authguard检查。如果该数据库中不存在该ID,则将被重定向到404路由。角度authguard firebase id检查

但由于某种原因,快照中的条件从不加载,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; 
    }); 
    }); 
} 
+0

您是否试过在'map'函数内写入'return this.af.database.list'? – echonax

+0

已经尝试过,但如果不起作用并且总是返回false。 – Jorge

+0

已更新线程与我目前的问题... – Jorge

回答

0

找到了解决办法,我用的是this.route(有2路),而不是仅仅accesing参数来获得钥匙。 此外,我使用的是订阅而不是地图(尽管我并不真正了解地图和订阅在这种情况下的区别),但出于某种原因访问订阅和返回真正的捕捉没有奏效。

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(); 
} 
0

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

也许你可以有你需要的ParamMap。如果你知道钥匙,你可以使用route.paramMap.get('yourkey')。如果你想在迭代请求的所有参数,可以你可以用它们作为数组:

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