Javascript AngularJS和Django只允许在用户登录时访问角度视图
我正在使用AngularJS、django rest框架和django。我想让anon用户无法访问angularjs端的视图。rest框架不允许anon用户从angularjs veiw实际执行任何操作,但是,anon用户仍然可以访问它,我想不允许这样做。所以基本上我想设置django在我的angularjs路由中拥有的登录所需的功能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
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');
});
});