Angularjs: разрешить несанкционированный доступ только для одной страницы - PullRequest
0 голосов
/ 04 июля 2018

Я использую UI-роутер. Я пытаюсь аутентифицировать все страницы, кроме страницы регистрации. Вот важные части кода:

В app.js:

$transition.onStart({ to: function(state) {
      return state.data != null && state.data.authRequired === true;
}},function(trans){
    var AuthService = trans.injector().get('AuthService');
     ....
});

В маршрутах.js:

$stateProvider.state('signup', {
  url: '/signup',
  templateUrl:'views/signeup.html',
  controller: 'SigneUp',
  data: {
    authRequired: false
  }
});

Но мне нельзя заходить на страницу регистрации, если я не аутентифицирован.

1 Ответ

0 голосов
/ 05 июля 2018

Вам понадобится служба, которая выполняет авторизацию и сохраняет состояние текущей авторизации для любого данного пользователя. Оттуда, в каждом из ваших контроллеров, проверьте для статуса авторизации, где требуется, разрешите доступ, когда не вошли в систему; где нет, сделайте остановку ворот.

Например:

angular.module('app', [])
   .controller('ctrlname', ['$scope', '$location', 'myAuthenticationService',  function($scope, $location, myAuthenticationService){

    //userId and Password to be bound to partials via ng-model.
    if (myAuthenticationService.authorizeUser(userId, password)){
        // DO what you have to for an authorized user.
    }
    else{
        // 
        $location.route('/unauthorized');
    } 

   }]

   .service('myAuthenticationService', ['$http', function($http){

        var self = this;

        //This is just for reference, might need more sophesticated authentication on server side anyways.
        self.authorizeUser = function(userId, password){
            return $http.get(`url/?userId=${userId}&password=${password}`)
            .success(function(response){
                //If user is validated,
                return true;
            })
            .error(function(error){
                return false;
            })
        }

        return {
            authorizeUser: function(userId, password){
                 return self.authorizeUser(userId, password);
            }
        }

   }]

Вы можете определить свои маршруты и добавить соответствующие контроллеры в routes.js.

...