如何防止Angularjs 1.x中的直接HTML访问?

时间:2017-12-16 07:39:02

标签: angularjs angular-ui-router

如何在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文件

2 个答案:

答案 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)

这是一个很好的解决方案https://solidfoundationwebdev.com/blog/posts/require-authentication-for-certain-routes-with-ui-router-in-angularjs

一般情况下,您应该收听$ 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(); 
    }
  });
});