Javascript AngularJS和Django只允许在用户登录时访问角度视图

Javascript AngularJS和Django只允许在用户登录时访问角度视图,javascript,django,angularjs,routes,Javascript,Django,Angularjs,Routes,我正在使用AngularJS、django rest框架和django。我想让anon用户无法访问angularjs端的视图。rest框架不允许anon用户从angularjs veiw实际执行任何操作,但是,anon用户仍然可以访问它,我想不允许这样做。所以基本上我想设置django在我的angularjs路由中拥有的登录所需的功能 var app = angular.module('mostAwesomeApp', ['restangular', 'ngRoute']) app.confi

我正在使用AngularJS、django rest框架和django。我想让anon用户无法访问angularjs端的视图。rest框架不允许anon用户从angularjs veiw实际执行任何操作,但是,anon用户仍然可以访问它,我想不允许这样做。所以基本上我想设置django在我的angularjs路由中拥有的登录所需的功能

var app = angular.module('mostAwesomeApp', ['restangular', 'ngRoute'])

app.config(function($routeProvider){
    var base_dir = STATIC_URL + 'js/ng-coolest-app-ever/templates/';

    $routeProvider.when('/',
        {
            templateUrl: base_dir + 'list.html',
            controller: 'listViewCtrl'
        })
        .when('/edit/:pk',{
            templateUrl: base_dir + 'update.html',
            controller: 'editCtrl'
        })
})

// any one can see this ctrl/view
app.controller('listViewCtrl', function($scope){
    $scope.doSomethingAwesome = function(){//doing something awesome}
})
// only authed users should be able access this ctrl and view attached to it
app.controller('editCtrl', function($scope){
    $scope.onlyAuthedUsersCanDoAndSee = function(){ 
        // doing something awesome for authed peeps}
    }
})
<div ng-app='mostAwesomeApp'>
    // This is the issue. If i'm using ng-view that means I cant just do a 
    // Django if user.auth... statements to dictate what a anon user can or 
    // cannot see 
    <ng-view></ng-view>
</div>
var-app=angular.module('mostAwesomeApp',['restanglar','ngRoute']))
app.config(函数($routeProvider){
var base_dir=STATIC_URL+'js/ng有史以来最酷的应用程序/templates/';
$routeProvider.when(“/”,
{
templateUrl:base_dir+'list.html',
控制器:“listViewCtrl”
})
.when('/edit/:pk'{
templateUrl:base_dir+'update.html',
控制器:“editCtrl”
})
})
//任何人都可以看到这个ctrl/view
app.controller('listViewCtrl',函数($scope){
$scope.doSomethingAwesome=function(){//做一些很棒的事情}
})
//只有经过身份验证的用户才能访问此ctrl和附加到它的视图
app.controller('editCtrl',函数($scope){
$scope.onlyAuthedUsersCanDoAndSee=function(){
//为授权窥视者做一些很棒的事情}
}
})
//这就是问题所在。如果我使用的是ng view,这意味着我不能只做
//Django if user.auth。。。语句,指示anon用户可以或
//看不见

所以我一直在讨论的解决方案就是将用户状态传递到JavaScript变量中,并使其成为我所有应用程序的全局。然后只需检查需要特殊处理的任何应用程序的var。。是的,它可以工作,但它看起来并不是最优雅的。

您可以使用$routeProvider的解析方法在加载视图之前检查登录的用户。如果未经验证,您可以引发应用程序另一部分侦听的任意事件,并将用户重定向到登录视图

$routeProvider.when('/edit/:pk',{
        templateUrl: base_dir + 'update.html',
        controller: `enter code here`'editCtrl',
        resolve: {
             currentUser: function(MyUserAuthService, $rootScope) {
                 var u = MyUserAuthService.getCurrentUser();
                 if (u === null) $rootScope.$broadcast('noauth');
                 return u;
             }
        }
    })

app.run(function($rootScope, $location) {
    $rootScope.$on('noauth', function() {
         $location.path('/loginpage');
    });
});