Angular.js,如何在控制器中检查身份验证服务

时间:2014-08-07 18:15:43

标签: javascript angularjs authentication

在angular.js中,在需要身份验证的所有控制器上,我正在执行以下操作:

function controller($state, $rootScope, $scope, oAuthService) {
    //oAuthService is a custom service
    if(!oAuthService.isAuthorized()) {
         $state.go('401');
    }
    ...
}

这个问题有两个问题。首先,我不喜欢我必须将这3行复制并粘贴到需要auth的每个控制器的顶部。其次,如果您转换到另一个控制器,则不会检查(仅在页面被硬刷新时检查)。这样做的最佳方式是什么?

1 个答案:

答案 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();
        }
    }