处理状态更改似乎不等待状态解决

时间:2014-09-07 10:54:04

标签: angularjs

我使用以下代码来处理基于身份验证的某些状态的访问。例如,如果用户已登录,则他们无法进入/登录或/注册。此外,如果他们没有登录,他们应该无法访问/管理员。我遇到的问题与上一个问题有关(参见:Waiting for $http before running angular spa)。在解决该问题后,在触发$ stateChangeStart事件之前不会发生解决。这会导致登录/ admin页面的用户刷新浏览器,即使他们已登录,也会碰到/登录页面。我希望有一种方法可以等待,或者也许我需要调整我对我的状态的决心。

处理run()中的状态更改:

$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams) {
    if (toState.access && toState.access.noauth && AuthenticationService.isLogged()) {
        event.preventDefault();
        $state.transitionTo('app.admin.dashboard');
    }
    if (toState.access && toState.access.auth && !AuthenticationService.isLogged()) {
        event.preventDefault();
        $state.transitionTo('app.login');
    }
});

解析身份验证验证:

$stateProvider
    .state('app', {
        abstract: true,
        url: '/',
        views: {
            root: {
                templateUrl: 'tpl/index.html'
            }
        },
        resolve: {
            User: ['$window', '$q', 'AuthenticationService', 'UserService' , function($window, $q, AuthenticationService, UserService) {
                if ($window.sessionStorage.token && !AuthenticationService.isLogged()) {
                    var d = $q.defer();
                    UserService.verify().success(function (data) {
                        AuthenticationService.setLogged(true);
                        d.resolve();
                    }).error(function () {
                        delete $window.sessionStorage.token;
                        d.resolve();
                    });
                    return d.promise;
                }
            }]
        }
    });

0 个答案:

没有答案