如何在Angularjs 1.x中阻止直接HTML访问?
代码:
$stateProvider.state('home', {
url: "/",
templateUrl: 'views/home.html',
title: 'Home',
controller: 'homeCtrl as home',
})
在浏览器中
在这种情况下,http://example.com/views/home.html,我在浏览器中呈现的HTML文件
答案 0 :(得分:1)
从.state
,您只能阻止用户使用resolve
访问您的状态并拒绝承诺
.state('home', {
url: "/",
templateUrl: 'views/home.html',
title: 'Home',
controller: 'homeCtrl as home',
resolve: {
isAutherized: function($q) {
// some logic goes here i guess...
return $q.reject("You shell not pass");
}
}
})
这将失败转换,并且结果将无法访问该特定HTML
答案 1 :(得分:0)
一般情况下,您应该收听$ stateChangeStart事件,并检查您是否获得了目的地的特定权限,并通过例如重定向来防止更改。
angular.module("myApp").run(function ($rootScope, $state, AuthService) {
$rootScope.$on("$stateChangeStart", function(event, toState, toParams, fromState, fromParams){
if (toState.authenticate && !AuthService.isAuthenticated()){
// User isn’t authenticated
$state.transitionTo("login");
event.preventDefault();
}
});
});