码迷,mamicode.com
首页 > Web开发 > 详细

AngularJS中的身份验证

时间:2016-02-25 01:38:25      阅读:407      评论:0      收藏:0      [点我收藏+]

标签:

欢迎大家指导与讨论 : )

   一、  身份验证的意义

    首先呢,网络应用的身份验证的意图在于:保护网站中的重要资源。基于某些原因这些资源并不能公开,比如付费资源(交过钱的用户才能上的网络课程),或者一些管理功能。

   二. 1、 客户端身份验证——保护API访问资源

 

   二. 2、 客户端身份验证——使用路由定义受保护资源

   首先我们需要四样工具。1、 angular常量constant. 2、 $routerProvider配置为每个路由配置权限. 3、 创建一个能操作cookie并判断是否有权限的服务. 4、 $rootScope对路由的监听

  举个简单的例子~ 一天风和日丽, 您要去参观一个藏有各种各样并且价值连城的收藏品的博物馆(用户要进入带有各种各样资源的站点)。博物馆里面呢,里面有许多不同的展区(站点里不同的路由视图),每个展区都有相应的等级,比如说宝石展区等级是VIP9以上的游客才能进去,而猎物展区等级是VIP2以上的游客就能进去参观了(每个路由配置相应的权限)。而每个游客,在进入博物馆的时候还会获得一张VIP卡,但是这个VIP卡是因人而异的,比如马云是VIP999,而小鹏我是VIP2(每个用户的权限不一样)。博物馆方面为了安全起见,为每个游客都配备了一个随身保镖,这个保镖呢会在你进入不同的展区(进入不同的路由)的时候呢,会让你先在展区门口站一会儿,取出你的VIP卡并和这个展区的等级进行匹对(保镖$rootScope的路由监听,而这个等级匹对的工作便是所构建的服务),只有你的VIP等级大于或者等于展区权限等级,您才能进去展区参观(根据用户权限判断是否能进去该路由)。

  下面是具体的实现方式

  1、 angular常量constant

app.constant(‘ACCESS_LEVELS‘, {
   pub: 1,
   user: 2  
});

 

  2、 $routerProvider配置为每个路由配置权限(注入常量)

app.config(function($routerProvider, ACCESS_LEVELS){
   $routerProvider
      .when(‘/‘, {
          templateUrl: ‘tem/main.html‘,
          access_level: ACCESS_LEVELS.pub
     })
      .when(‘/account‘, {
          templateUrl: ‘tem/account.html‘,
          access_level: ACCESS_LEVELS.user
     })
      .otherwise({redirectTo: ‘/‘})
})

  3、 创建一个能操作cookie并判断是否有权限的服务(注入常量)

app.factory(‘Auth‘, function($cookieStore, ACCESS_LEVELS){
    var _user = $cookieStore.get(‘user‘);
    var setUser = function(user){
         if(!user.role || user.role < 0){
               user.role = ACCESS.LEVELS.pub‘
         }
         _user = user;
         $cookieStroe.put(‘user‘, _user)
    };
    return {
         isAuthorized: function(lvl){
              return _user.role >= lvl
         },
         setUser: setUser,
         isLoggedIn: function(){
              return _user ? true : false
         },
         getUser: function(){
              return _user
         },
         getId: function(){
              return _user ? _user.id : null;
         },
         logout: function(){
             $cookieStore.remove(‘user‘);
             _user = null;
         }
    } 
})

   4、 $rootScope对路由的监听

app.run(function($rootScope, $location, Auth){
    $rootScope.$on(‘$routeChangeStart‘, function(evt,next,curr){
          if(!Auth.isAuthorized(next.$$route.access_level){
                //没有访问权限
                if(Auth.isLoggedIn()){ 
                      //如果登陆了
                      $location.path(‘/‘)
                }else{
                       $location.path(‘/login‘);
                }
          })
    })
})            

   三、 发送经身份验证的请求

  

 

 

  资料参考:

  《AngularJS权威指南》P159

AngularJS中的身份验证

标签:

原文地址:http://www.cnblogs.com/BestMePeng/p/AngularJS_Verify.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!