2017-03-15 32 views
6

我正在使用JWT对用户进行身份验证。我的angular2应用程序中的部分路径受CanActivate Guard保护,如果用户未登录,它将重定向到登录页面。现在我正在实施登出按钮,并且希望重定向到登录页面。我只想在未登录的用户(例如帐户页面)上看不到当前路由时才重定向。如果用户是例如在主页,我不想重定向到登录页面。Angular2:触发当前路由防护 - 处理注销操作

这将是完美的,如果我可以检查当前路线是否有警惕并触发这名警卫,如果它存在。有可能做到这一点?

后卫:

public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    if (this.loginService.getCurrentUserName()) { 
     // logged in so return true 
     return true; 
    } 
    // not logged in so redirect to login page with the return url 
    this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }}); 
    return false; 
} 

回答

2

对于所有航线后卫所需要的页面,你可以有一个特定的路由路径(如“/帐号/ ..”,你可以检查线路防护页面是否在登录或不

public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { 
    this.checkRouteNaviation(this.route.url); 
} 

public checkRouteNaviation(url) { 
    if(url.includes('account') && !this.loginService.getCurrentUserName()) { 
     // when url is of guard url and not logged in, redirect to login page with the return url 
     this.router.navigate(['/login'], { queryParams: { returnUrl: state.url }}); 
     return false; 
    } 
    return true; 
} 

希望它有助于