繁体   English   中英

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

[英]Angular.js, how to check authentication service in controllers

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

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

问题有两个。 首先,我不喜欢将这三行复制并粘贴到每个需要身份验证的控制器的顶部。 其次,如果您不转换到另一个控制器,则不检查身份验证(仅检查硬刷新页面时) 最好的方法是什么?

在您的根控制器中添加以下代码行。

    $rootScope.$on("$stateChangeStart", function (event, oAuthService) {
        if(!oAuthService.isAuthorized()) {
                   $state.go('401');
                   event.preventDefault();
        }
    }

编辑

回答您的评论。

您应该在每个状态上设置一些布尔属性,以指示是否需要身份验证。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM