在angular.js中,在需要身份验证的所有控制器上,我正在执行以下操作:
function controller($state, $rootScope, $scope, oAuthService) {
//oAuthService is a custom service
if(!oAuthService.isAuthorized()) {
$state.go('401');
}
...
}
这个问题有两个问题。首先,我不喜欢我必须将这3行复制并粘贴到需要auth的每个控制器的顶部。其次,如果您转换到另一个控制器,则不会检查(仅在页面被硬刷新时检查)。这样做的最佳方式是什么?
答案 0 :(得分:2)
在根控制器中添加以下代码行。
$rootScope.$on("$stateChangeStart", function (event, oAuthService) {
if(!oAuthService.isAuthorized()) {
$state.go('401');
event.preventDefault();
}
}
修改强>
回答你的评论。
你应该在每个状态上设置一些布尔属性,指示是否需要auth。
.state('home', {
url: '/home',
templateUrl: 'partial-home.html',
isSecured: true
})
然后
$rootScope.$on("$stateChangeStart", function (event, toState) {
if(!oAuthService.isAuthorized() && toState.isSecured && toState.name != '401') {
$state.go('401');
event.preventDefault();
}
}