Angular.js:仅允许未经授权访问一页

时间:2018-07-04 10:54:43

标签: angularjs angular-ui-router

我正在使用ui-router。我正在尝试验证除注册页面以外的所有页面。 这是代码的重要部分:

在app.js中:

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

在routes.js中:

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

但是除非获得认证,否则不允许进入注册页面。

1 个答案:

答案 0 :(得分:0)

您将需要具有执行授权并为任何给定用户存储当前auth状态的服务。从那里,在每个控制器中,根据需要检查身份验证状态,并在未登录时允许访问;在没有的地方,停车。

例如:

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中添加相应的控制器。