Javascript 阻止用户在登录后导航到某些URL-angular ui router
目前,我正在我的应用程序中使用angularjs开发一个示例管理应用程序。我使用了ui-router而不是ngRoute来定义URL。在我的配置函数中,状态定义如下Javascript 阻止用户在登录后导航到某些URL-angular ui router,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,目前,我正在我的应用程序中使用angularjs开发一个示例管理应用程序。我使用了ui-router而不是ngRoute来定义URL。在我的配置函数中,状态定义如下 sampleModule.config(['$stateProvider','$urlRouterProvider',function ($stateProvider,$urlRouterProvider) { $urlRouterProvider.otherwise('login'); $stateProvide
sampleModule.config(['$stateProvider','$urlRouterProvider',function ($stateProvider,$urlRouterProvider) {
$urlRouterProvider.otherwise('login');
$stateProvider
.state('login',{
url:'/login',
templateUrl: 'views/html/login.html',
controller: 'authCtrl'
}).state('main', {
url:'/main',
templateUrl: 'views/html/main.html',
controller: 'adminViewCtrl'
});
}]);
在应用程序的运行状态下,我将用户重定向到各自的视图,如下所示
sampleModule.run(function ($rootScope, AuthService, $state) {
$rootScope.$on("$stateChangeStart", function (event) {
if (AuthService.isAuthenticated()) {
event.preventDefault();
$state.go('main');
} else {
event.preventDefault();
$state.go('login');
}
});
});
但我面临的问题是应用程序出现以下异常,并且在URL更改时有时会崩溃
RangeError:超出了最大调用堆栈大小
我将调试点放在应用程序的运行功能上,然后
并注意到出现错误是因为if(AuthService.isAuthenticated()){条件在无限循环中执行
下面是chrome开发者工具中错误的图片
我对这里发生的事情感到困惑,我在谷歌上搜索了几个小时,没有找到一个直接的答案,我甚至试着把event.preventDefault()作为我看到的一些建议,但这无助于解决问题
我想知道我在这里犯了什么错误?在登录到应用程序后,有没有更好的方法限制用户访问登录页面或应用程序的其他部分?这里的问题是,您不断地将用户重定向到相同的状态。下面是发生的情况:用户进入某个状态,
$stateChangeStart
is触发后,您再次将用户重定向到其他状态,然后再次触发$stateChangeStart
,您检查身份验证并再次重定向,直到出现RangeError
为止。您可能只需要在未经授权的情况下重定向用户,如果他已获得授权,请让他查看他正在查看的页面r
sampleModule.run(function ($rootScope, AuthService, $state) {
$rootScope.$on("$stateChangeStart", function (event, toState) {
if (!AuthService.isAuthenticated() && toState.name !== 'login') {
$state.go('login');
} else if(AuthService.isAuthenticated() && toState.name === 'login') {
$state.go('main');
}
});
});
在这里,您可以检查用户是否已授权,导航状态是否未登录(因为他已被重定向),然后检查它是否是他想要的登录页面,并重定向到
main
@domakas-非常感谢您的快速回答,它帮助解决了我的问题:)