Page 183 - AngularJS权威教程
P. 183

16.7 使用 AngularJS 进行身份验证   163


                  上面每一个路由都定义了自身的access_level,可以根据这一点判断当前用户的授权状态,                                     1
              以及用户的级别是否有权限访问当前路由。
                  此时,用户可能处于以下两种状态:                                                                   2

                   未经过身份验证的匿名用户;
                   通过身份验证的已知用户。                                                                     3
                  为了验证用户的身份,需要创建一个服务来对已经存在的用户进行监视。同时需要让服务能
              够访问浏览器的cookie,这样当用户重新登录时,只要会话有效就无需再次进行身份验证。                                            4
                  这个小服务包含了一些操作用户对象的辅助函数:
                                                                                                     5
                  angular.module('myApp.services', [])
                  .factory('Auth',  function($cookieStore,ACCESS_LEVELS) {
                      var _user = $cookieStore.get('user');
                                                                                                     6
                      var setUser = function(user) {
                          if (!user.role || user.role < 0) {
                              user.role = ACCESS_LEVELS.pub;                                         7
                          }
                          _user = user;
                          $cookieStore.put('user', _user);
                      };                                                                             8

                      return {
                          isAuthorized: function(lvl) {                                              9
                              return _user.role >= lvl;
                          },
                          setUser: setUser,
                          isLoggedIn: function() {                                                   10
                              return _user ? true : false;
                          },
                          getUser: function() {                                                      11
                              return _user;
                          },
                          getId: function() {
                              return _user ? _user._id : null;                                       12
                          },
                          getToken: function() {
                              return _user ? _user.token : '';                                       13
                          },
                          logout: function() {
                              $cookieStore.remove('user');                                           14
                              _user = null; }
                          }
                      };
                  });                                                                                15
                  现在,当用户已经通过身份验证并登录后,可以在$routeChangeStart事件中对其有效性进
              行检查。                                                                                   16

                  angular.module('myApp', [])
                  .run(function($rootScope, $location, Auth) {                                       17
                      // 给$routeChangeStart设置监听
                      $rootScope.$on('$routeChangeStart', function(evt, next, curr) {

                          if (!Auth.isAuthorized(next.$$route.access_level)) {                       18
   178   179   180   181   182   183   184   185   186   187   188