0

在一个 Web 应用程序中,我希望当用户在 $state 中路由时,Angular 会检查是否有令牌以及他是否有权限。但我有一个问题:即使我执行 event.preventDefault(),它也会启动一个循环并且浏览器崩溃。我怎样才能防止这个循环,让用户去或阻止导航?

代码:

  .run(function ($rootScope, $window, $state, Auth) {
  $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, $window) {

// Easy case that doesn't loop: just 'return'
if (toState.name === 'login' ){
    // doe she/he try to go to login? - let him/her go
    return;
}

if (Auth.isLoggedIn && $window.localStorage.identityToken) {

  var requiredAdmin = toState.data.requiredAdmin; 
  if (requiredAdmin && $window.localStorage.isAdmin){
    $state.go(toState.name); // it starts the loop
  } else { // if he is logged but has no permission, stop the navigation
    $state.go(fromState.name); // it starts the loop
  }

  return;
}

});
4

1 回答 1

0

您应该检查较高的状态,而不是检查每个状态更改,因此如果您有 /login、/secured、/secured/.... 等路由,请检查 /secured 状态的 resolve 子句,否则您的逻辑将在每次状态更改时执行,这不是身份验证/授权过程的正确方法。

https://github.com/angular-ui/ui-router/wiki

这样,您只需在子路径上进行一次检查。

于 2016-04-17T16:41:12.863 回答