2017-03-04 24 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); 
    }) 
} 
} 
相關問題