在运行angular spa之前等待$ http

时间:2014-09-07 09:02:23

标签: angularjs jwt

我有一个使用JWT(json web令牌)的SPA来授权api。问题是当他们登录后在浏览器上点击刷新我需要通过ajax请求验证令牌仍然有效,然后继续加载SPA。我将此添加到.run()中的哪种方法有效,但由于我的导航会在登录后发生更改,因此在验证令牌之前页面会加载,并且看起来不对。我是棱角分明的新人,但我猜这可以用诺言来完成吗?

// handle refreshing browser
if ($window.sessionStorage.token && !AuthenticationService.isLogged()) {
    UserService.verify().success(function (data) {
        AuthenticationService.setLogged(true);
    }).error(function () {
         delete $window.sessionStorage.token;
         $state.transitionTo('app.login');
    });
}

1 个答案:

答案 0 :(得分:0)

我能够通过以下状态设置实现此功能:

$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;
                }
            }]
        }
    });