AngularJs身份验证如何避免闪烁

时间:2014-11-11 09:32:43

标签: angularjs authentication

我正在使用AngularJs构建一个应用程序,如果他没有登录,我想阻止用户访问应用程序的内部页面。

我有一个单独的登录应用程序(loginApp)和主应用程序(mainApp)。到目前为止,我在mainApp中为支持身份验证所做的工作如下:

mainApp.config(['$routeProvider', function($routeProvider) {
    $routeProvider. when('/apage', {
        templateUrl: ...,
        controller: ....,
        resolve: {
            load: function($q, AuthService){
                var defer = $q.defer();
                if(AuthService.notLoggedIn) {
                   defer.reject('user_not_logged_in');
                } else {
                   defer.resolve();
                }
                return defer.promise;
            }
        }
    }).run(function($rootScope, $window) {
        $rootScope.$on('$routeChangeError', function(event, next, current, rejection) {
            if (rejection === 'user_not_logged_in') {
                $window.location = '/html/pages/login.html';
            }
        });
    });
}])

我的mainApp的html页面由一个导航栏(由navbarControllers模块中定义的控制器控制)和一个包含ng-view指令的div(部分页面去那里)组成。

我的问题是上面的代码适用于部分页面,但不适用于导航栏。 Navbar正常加载,其控制器尝试调用后端但它们失败(因为用户未经过身份验证),因此警报弹出然后重定向到登录页面。为什么会这样?如何阻止navbarControllers模块加载和导航栏显示?

1 个答案:

答案 0 :(得分:0)

你可以使用这样的东西

@if (Request.IsAuthenticated) {
  // code for your navbar which required user authentication
}
else {
  // navbar for logged out user.
}