在我希望的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;
}
});
答案 0 :(得分:0)
你应该检查更高的状态而不是每次状态改变,所以如果你有像/ login,/ secured,/ secured / ....这样的路由,你可以检查/ secure状态的resolve子句否则你的逻辑将在每次状态变化时执行,这不是认证/授权过程的正确方法。
https://github.com/angular-ui/ui-router/wiki
这样您只能在子路径上进行一次检查。