Angularjs:限制访问除少数之外的所有页面

时间:2015-03-09 14:28:30

标签: angularjs authentication angular-ui-router jwt

我将Angularjs与ui-router和JWT(基于令牌的身份验证的工具)一起使用,并希望实现身份验证。

假设我想限制除了三个以外的所有页面的访问权限:" / home"," / about"和" / login"。我怎样才能达到这个效果?

2 个答案:

答案 0 :(得分:1)

它正在工作!享受:)

var scotchApp = angular.module('scotchApp', ['ngCookies','ngRoute','ui.bootstrap']);

    scotchApp.run(['$rootScope', '$location', 'Auth', function($rootScope, $location, Auth) {
        $rootScope.$on('$routeChangeStart', function(event, current) {
            $rootScope.pageTitle = current.$$route.title;
            if (!Auth.isLoggedIn() && current.$$route.withLogin || Auth.isLoggedIn() && current.$$route.withoutLogin) {
                event.preventDefault();
                $location.path('/');
            }
        });
    }]);

    scotchApp.config(function($routeProvider) {
        $routeProvider
        // route for the home page

            .when('/list', {
            templateUrl: 'pages/list.html',
            controller: 'mainController',
            title: 'User List',
            withLogin: true,
        })

        .when('/register', {
            templateUrl: 'pages/register.html',
            controller: 'mainController',
            title: 'Register',
            withoutLogin: true,
        });
    });

答案 1 :(得分:0)

下面我将为您解释如何使用angularjs保护访问哲学:

1-我们假设您的工厂名为verifyLogin,此工厂用于验证用户是否连接(在此工厂函数中名为isAuth

2 -file config包含以下代码:

$stateProvider
    .state('docApp.doc_components_profiles', {
        needLogin: true,                
        url  : '/admin/page1',
        views: {
            'content@docApp': {
                templateUrl: 'app/admin/pages/profiles.html',
                controller : 'AdminController as vm'
            }
        }
    });

在这里,您看到我们编写了名为needLogin的属性,并且我们对此属性值= true有影响,为了访问此路径(管理页面),必须对用户进行身份验证。

3 - 现在每次用户从一个用户导航到另一个时,您可以像下面一样编写验证路径

 $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams){
     if(toState.needLogin){
         if(verifyLogin.isAuth== false)
              {
              console.log("Ypou must connect before you access to this url!!");
               $location.path('/login');
              }
      }
}