我正在使用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模块加载和导航栏显示?
答案 0 :(得分:0)
你可以使用这样的东西
@if (Request.IsAuthenticated) {
// code for your navbar which required user authentication
}
else {
// navbar for logged out user.
}