2017-03-04 4 views
1

Schließlich CanActivate beim Versuch, verschiedene Benutzer nach ihren Rollen auf verschiedene Bereiche der App umzuleiten. Wenn sie jedoch auf die falsche Route gehen, kann ich dies nicht umleiten. Hier ist, was ich habe:CanActivate Versprechen <boolean> nicht navigiertbyurl nach Ablehnung

canActivate(route: ActivatedRouteSnapshot, 
    state: RouterStateSnapshot): Promise<boolean> { 
    return new Promise((resolve, reject) => { 

     this.af.auth.subscribe(user => { 

      if (user) { 
       let userProfile = firebase.database().ref(`/users/${user.uid}`); 
       userProfile.once("value", (snapshot) => { 
        let userInfo = snapshot.val().role; 
        if (userInfo === "GroupA") { 
         resolve(true); 
        } else { 
         reject(this.router.navigate(['/login'])); 
        } 
       }); 

      } else { 
       reject(this.router.navigate(['/login'])); 
      } 

     }); 

    }); 
} 

Warum wird es nicht router.navigate? 100% offen dafür, von besseren Ideen zu hören.

+0

Mit falscher Route was meinst du? bedeutet eine Route, die nicht definiert ist. Sie können in Ihrer Routing-Datei ein "Wild Character **" zum Redirecten verwenden, wenn er auf eine falsche Route geht. –

+0

Beide Routen sind definiert./GroupA und/GroupB, aber keiner kann auf beide Benutzerrouten zugreifen. Also, ** würde diese beiden als gültige Routen sehen. – dhndeveloper

Antwort

1

Das funktioniert!

canActivate(route: ActivatedRouteSnapshot, 
    state: RouterStateSnapshot): Promise<boolean> { 

    let promise = new Promise((resolve, reject) => { 

     this.af.auth.subscribe(user => { 

      if (user) { 
       let userProfile = firebase.database().ref(`/users/${user.uid}`); 
       userProfile.once("value", (snapshot) => { 
        let userInfo = snapshot.val().role; 
        if (userInfo === "provider") { 
         resolve(true); 
        } else { 
         reject(false); 
        } 
       }); 
      } 
     }); 

    }).catch(() => { 
     this.router.navigate(['/login']) 
    }); 

    return promise.then(() => { 
     return true; 
    }, error => { 
     console.log(error); 
    }) 
} 
} 
Verwandte Themen