2017-03-04 22 views
1

终于在尝试将不同用户的角色转移到应用的不同区域时终于获得了CanActivate。但是,如果他们走错了路线,我不能得到这个重定向。这里是我有:CanActivate Promise <boolean>在拒绝后不会导航byurl

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'])); 
      } 

     }); 

    }); 
} 

为什么不router.navigate? 100%开放听取更好的想法来做到这一点。

+0

错误的路线是什么意思?意味着没有定义的路线。你可以在你的路由文件中使用野性字符**来重定向,如果他走错了路线 –

+0

这两条路线都已定义。/GroupA和/ GroupB,但任何一个都不能访问任何用户路由。所以,**会将这两个视为有效路线。 – dhndeveloper

回答

1

This Works!

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); 
    }) 
} 
} 
相关问题