角。不检查身份验证

时间:2015-10-31 11:58:10

标签: angularjs

我的角度应用中未检查身份验证。用户不应该访问" car" &安培; "轮廓"没有登录的视图,但现在我可以得到它。我已经添加了#34; secure"应该从未经过身份验证的用户隐藏的页面的属性。我在app.js中添加了apprun检查。但它不起作用。

此处 services.js

Have you seen the <a href="#" class="error">laetst</a> Star Wars movie yet?

以及 app.js

    'use strict';
angular.module('myApp')
.service('carsSrv', function () {
  var carList = [];

  var addUserCar = function (currObj, title, color, description, image) {
    currObj = {
        title: title,
        color: color,
        descriptiopn: description,
        image: image
      };
      /* console.log("Car Added:  " + currObj.id + "\n" + currObj.title + "\n" + currObj.color + "\n" + currObj.description + "\n" + currObj.image);*/
    carList.push(currObj);
    console.log(carList);
  };

  var getCars = function () {
    console.log("User cars");
    console.log(carList);
    return carList;

  };

  return {
    addUserCar: addUserCar,
    getCars: getCars
  }


})
.service('userSrv', userSrv)
.provider('storageSrv',storageSrv);
    function userSrv(storageSrv, carsSrv) {
      var user = {name: '', cars: carsSrv.carList };
      this.getUser = function() {
          return user;
      };

      this.getUserName = function () {
          return user.name;
      };
      this.login = function(){
        user.name = 'test name';
        user.cars = init();
        storageSrv.updateData(user);
                return true;

      }
      this.logout = function(){
        user.name = '';
        user.cars = [];
        alert('User logs out');
        storageSrv.updateData(user);
      }
      this.checkLoginUser = function(){
        return user.name !='';
      }
      this.getUserFeatures = function(){
        return user.features;
      }
      this.registration = function(){
        user.name = name;
        user.cars = init();
      }
      function init(){
        return storageSrv.getData();
      }

    }



  function storageSrv(){
    var storageName = 'cars';
    return {
      configStorageName : configStorageName,
      $get:$get
    };

    function configStorageName(name){
      if(name){
        storageName = name;
        return this;
      }
      else{
        return storageName;
      }
    }

    function $get(){
      function updateStorage(data){
        localStorage.setItem(storageName, data);
      }
      function getStorage(){
        return localStorage.getItem(storageName);
      }
      function updateData(data){
        console.log('storageName ' + storageName);
        updateStorage(JSON.stringify(data));
      }
      function getData(){
        console.log('storageName ' + storageName);
        var data = getStorage();
        return JSON.parse(data) || [];
      }
      return {
        updateData: updateData,
        getData:getData
      }
    }
  };

1 个答案:

答案 0 :(得分:1)

您没有真正运行代码appRun。尝试将最后一行添加到模块声明中:

angular.module('myApp', [
    'ngRoute'
])
    .constant('STORAGE_NAME', 'USER_CARS')
    .config(configStorage)
    .config(configRoutes)
    .run(appRun);

另外,因为appRun是一个包含匿名函数的变量,而不是名为appRun的函数,所以当你调用run(appRun)(在文件的开头)时,变量被定义但是仍undefined。这就是函数没有运行的原因。

此外,在收听活动时,您使用的是$rootScope.on()功能,而不是正确的名称$rootScope.$on()。除此之外,我在我的计算机上测试了它,它似乎正在工作。

function checkRoute ( userSrv, $location, current ) {
    if (current.secure && !userSrv.checkLoginUser()) {
        $location.path('/login');
    }
}

function appRun ($rootScope, $route, $location, userSrv) {
    $rootScope.$on('$routeChangeStart', function(event, next) {
        checkRoute(userSrv, $location, next);
    });

    $rootScope.$on('sessionLogout', function () {
        checkRoute(userSrv, $location, $route.current);
    });
};

更新:要使注销生效,一种策略是在注销时发出事件,然后监听它,并进行相同的检查以确定页面是否安全。 / p>

function userSrv($rootScope, storageSrv, carsSrv) {
    //...
    this.logout = function(){
        user.name = '';
        user.cars = [];
        alert('User logs out');
        storageSrv.updateData(user);

        // Emit an event notifying the application that
        // the user has logged out
        $rootScope.$emit('sessionLogout');
    }
    //...
}