使用身份验证库在routechangestart上加载微调器

时间:2014-07-29 13:11:45

标签: javascript angularjs authentication hottowel

我在从高级开发人员那里继承的项目中使用Hot Towel角度库(https://github.com/johnpapa/hottowel-angular-bower)。

我还为Angular合并了Auth0的身份验证库。

我需要将一些路由限制为经过身份验证的用户。为此,我设置了一些路线属性 isLogin: true用于仅限未经过身份验证的用户的路由 requiresLogin: true用于需要身份验证的路由,而对于那些不需要身份验证的路由则相反。为了检查每个runthrough上的这些​​属性,我使用$rootScope.$on('$routeChangeStart' function())

app.run(function ($rootScope, $location, auth, common, config) {
    var getLogFn = common.logger.getLogFn,
        log      = getLogFn('auth handle'),
        events   = config.events;

    $rootScope.$on('$routeChangeSuccess', function (e, nextRoute, currentRoute) {
        if (nextRoute.$$route && nextRoute.$$route.settings && nextRoute.$$route.settings.requiresLogin) {
            if (!auth.isAuthenticated) {
                $location.path('/login');
                log('User not authenticated');
            }
        }
        if (nextRoute.$$route && nextRoute.$$route.settings && nextRoute.$$route.settings.isLogin) {
            if (auth.isAuthenticated) {
                $location.path('/');
                log('User is authenticated');
            }
        }
    })
});

现在,这似乎干扰了Hot-Towel中包含的微调器功能。在Shell.js中,我找到以下内容:

$rootScope.$on('$routeChangeStart',
    function (event, next, current) { toggleSpinner(true); }
);

$rootScope.$on(events.controllerActivateSuccess,
    function (data) { toggleSpinner(false); }
);

$rootScope.$on(events.spinnerToggle,
    function (data) { toggleSpinner(data.show); }
);

旋转器永远不会停止旋转(例如vm.isBusy = true,因为控制器永远不会被激活并重置它),我将如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我没有长时间研究你的代码,但你不应该使用$routeChangeSuccess来阻止微调器吗?

$scope.isViewLoading = false;
$scope.$on('$routeChangeStart', function() {
    $scope.isViewLoading = true;
});
$scope.$on('$routeChangeSuccess', function() {
    $scope.isViewLoading = false;
}); 

答案 1 :(得分:0)

一个想法是,你可以使用一个事件($ broadcast)来通知未经授权的访问权限,然后由关闭微调器的控制器接收它。