【问题标题】:Angular2: Trigger current route guards - handle logout actionAngular2:触发当前路由保护 - 处理注销操作
【发布时间】:2017-08-06 05:03:51
【问题描述】:

我正在使用 JWT 对用户进行身份验证。我的 angular2 应用程序中的部分路由受 CanActivate Guard 保护,如果用户未登录,它将重定向到登录页面。现在我正在实现注销按钮并希望重定向到登录页面。我只想在当前路由对非登录用户不可见时重定向(例如帐户页面)。例如,如果用户在主页中,我不想重定向到登录页面。

如果我可以检查当前路线是否有警卫并在存在时触发该警卫,那将是完美的。有可能吗?

后卫:

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;
}

【问题讨论】:

    标签: angular angular2-routing


    【解决方案1】:

    对于所有需要路由保护的页面,您可以有一个特定的路由路径(如'/account/..',您可以检查路由保护页面是否已登录

    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;
    }
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2018-06-30
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多