2015-10-31 1 views
0

Аутентификация не проверяется в моем угловом приложении. Пользователь не должен иметь доступ к «авто» & «профиль» без входа в систему, но теперь я могу добраться до него. Я добавил «безопасное» свойство на страницы, которые должны быть скрыты от пользователя, не прошедшего проверку подлинности. Я добавил чек для apprun в app.js. Но это не работает.Угловой. Аутентификация не проверяется

здесь services.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 
     } 
    } 
    }; 

и вот app.js

'use strict'; 

// Declare app level module which depends on views, and components 
angular.module('myApp', [ 
    'ngRoute' 
]) 
    .constant('STORAGE_NAME', 'USER_CARS') 
    .config(configStorage) 
    .config(configRoutes) 

.controller('carsCtrl', ['$scope', '$http', 'carsSrv', 
    function($scope, $http, carsSrv) { 
     $scope.view = "Cars"; 
     $http.get('cars/cars.json') 
      .success(function(data) { 

       $scope.cars = data; 

       $scope.addCar = function(id, title, color, description, image) { 
        carsSrv.addUserCar(id, title, color, description, image); 
       }; 

      }) 
      .error(function() { 
       alert("can not get data from cars.json"); 
      }); 
    } 
]) 

.controller('homeCtrl', ['$scope', 

    function($scope) { 
     $scope.view = "Home"; 
    } 
]) 

.controller('loginCtrl', ['userSrv', '$scope', 
    function(userSrv, $scope) { 
     $scope.view = "Login"; 
     $scope.userLogin = function() { 
      userSrv.login(); 

     } 
     $scope.userLogout = function() { 
      userSrv.logout(); 

     } 

    } 
]) 

.controller('profileCtrl', ['$scope', 'carsSrv', 
    function($scope, carsSrv) { 
     $scope.view = "Profile"; 
     $scope.userCars = carsSrv.getCars(); 


    } 
]); 

function configStorage(storageSrvProvider, STORAGE_NAME) { 
    console.log(storageSrvProvider); 
    storageSrvProvider.configStorageName(STORAGE_NAME); 
} 

function configRoutes($routeProvider) { 
    $routeProvider 

    .when('/cars', { 
     templateUrl: 'views/cars.html', 
     controller: 'carsCtrl', 
     secure: true 
    }) 

    .when('/profile', { 
     templateUrl: 'views/profile.html', 
     controller: 'profileCtrl', 
     secure: true 
    }) 

    .when('/home', { 
     templateUrl: 'views/home.html', 
     controller: 'homeCtrl', 
     secure: false 
    }) 

    .when('/login', { 
     templateUrl: 'views/login.html', 
     controller: 'loginCtrl', 
     secure: false 
    }) 



    .otherwise({ 
     redirectTo: '/home' 
    }); 
} 

var appRun = function($rootScope, $location, $userSrv) { 
    $rootScope.on('$routeChangeStart', function(event, next) { 
     if (next.secure && !userSrv.checkLoginUser()) { 
      $location.path('/login'); 
     } 
    }); 
}; 

ответ

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); 
    }); 
}; 

Update: Для выхода из системы для работы, одна стратегии испускать событие при входе, а потом слушать, что даже и делать то же проверить, если страница является безопасной или нет.

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'); 
    } 
    //... 
} 
+0

Я добавил. Теперь у меня есть это «angular.module ('MYAPP', [ 'ngRoute' ]) .constant ('STORAGE_NAME', 'user_cars') .config (configStorage) .config (configRoutes) .run (appRun) .controller ('carsCtrl' ..... "- это не помогает – wrath1888

+0

Имеет ли в вашем браузере какие-либо ошибки? –

+0

Не для приложения всего 404 для favicon – wrath1888

Смежные вопросы