2017-04-25 3 views
0

저는 404 인증 검사를하려고합니다. ID가 데이터베이스에 없으면 404 경로로 리디렉션됩니다.각도 인증 기관 ID 확인

하지만 어떤 이유로 스냅 샷 내부의 조건이로드되지 않으며 자동 보호기가 자동으로 홈 경로로 리디렉션합니다.

이 여기에 코드입니다 :

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

이미 시도했지만 if가 작동하지 않으며 항상 false를 반환합니다. – Jorge

+0

현재 문제가있는 스레드를 업데이트했습니다 ... – Jorge

답변

0

가 해결책을 발견 (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 배열도 피 감시하지만, 개체가 아닙니다. Observable을 반환하기 때문에 을 ActivatedRoute과 함께 사용할 수 있지만 스냅 숏은 스트림이 아닌 고정 된 값을 반환합니다. 또한 route 대신 this.route을 사용하고 있습니다. 오류가 발생하지 않으면 다른 route 가드에있을 수 있습니다.

아마도 ParamMap으로 필요한 것을 가질 수 있습니다. 키를 알고 있다면 route.paramMap.get('yourkey')을 사용하면됩니다. 당신이 요청에있는 모든 PARAMS을 반복 할 경우, 사용 배열로를 가질 수있다 : 나는 this.route 사용했는데,

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