Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在网络中保护路由_Javascript_Angularjs - Fatal编程技术网

Javascript 在网络中保护路由

Javascript 在网络中保护路由,javascript,angularjs,Javascript,Angularjs,我正在开发一个Angular应用程序,它调用外部API进行登录验证 我要成功地调用API来登录和注销,我使用它将布尔值放入本地存储(因此刷新时它会保持不变) 我觉得这可能是一种非常糟糕的实现方式。有没有更好的方法 我的实施: app.js var module = angular .module('myApp', [ 'ngRoute', 'ngTouch', 'LocalStorageModule' ]) .config(function ($routePr

我正在开发一个Angular应用程序,它调用外部API进行登录验证

我要成功地调用API来登录和注销,我使用它将布尔值放入本地存储(因此刷新时它会保持不变)

我觉得这可能是一种非常糟糕的实现方式。有没有更好的方法

我的实施:

app.js

var module = angular
  .module('myApp', [
    'ngRoute',
    'ngTouch',
    'LocalStorageModule'
  ])
  .config(function ($routeProvider, $locationProvider, localStorageServiceProvider) {
 $routeProvider
 ...
 .when('/protectedroute, {
  ...
 resolve: {
  'auth': function(Auth) {
     return Auth.authorized(); 
  }

 }
})

}
身份验证服务:

angular.module('myApp')
  .service('Auth', function ($http, $q, $window, $location, localStorageService) {

    var isLogged = localStorageService.get('isLogged');
    console.log(isLogged);
    return {
      authorized: function() {
        if (!localStorageService.get('isLogged')) {
          console.log('DENY');
          $location.path('/');
        } else {
          console.log('ALLOW');
        }
      }
    }
  });
登录服务:

angular.module('myApp')
  .service('Login', function ($http, $q, $window, $location, localStorageService) {
    return {
      login: function (username, password) {
        var reqLogin = {
          method: 'POST',
          url: 'url_api',
          data: $.param({
            'user[email]': username,
            'user[password]': password
          }),
          headers: {
            ...
          }
        }

        $http(reqLogin).then(function successCallback(response) {
          console.log('success!');
          console.log(response);
          localStorageService.set('isLogged', true);
          localStorageService.set('user[email]', username);
          console.log(localStorageService.get('isLogged'), localStorageService.get('user[email]'));


          $location.path('/profile');

        }, function errorCallback(response) {
          console.log('failure');
          console.log(response);
        });
      },
      logout: function() {
        var reqLogout = {
          method: 'DELETE',
          url: 'url_api',
          headers: {
            ...
          }
        }

        $http(reqLogout).then(function successCallback(response) {
          console.log('success!');
          console.log(response);
          localStorageService.set('isLogged', false);
          console.log(localStorageService.get('isLogged'), localStorageService.get('user[email]'));

          $location.path('/');

        }, function errorCallback(response) {
          console.log('failure');
          console.log(response);
        });
      }
    };

  });

在app.js的run()方法中,附加到路由更改事件。当您的URL或状态发生变化时,该事件将触发,在那里,您可以检查您想要的任何条件,并在以后执行每一个操作类似这样的操作?确切地这就是你所能做的保护你想要的路线的方法,如何比我目前所做的方法更安全?你无法做任何事情来保护你的路线。因为每个使用你的站点的人都会下载你的源代码的副本(缩小了?),所以他们可以修改它。不过,您可以通过服务器端身份验证来保护API调用,但这完全是另一回事。