Page 184 - AngularJS权威教程
P. 184

164  第 16 章  XHR 实践


                             if (Auth.isLoggedIn()) {
                                 // 用户登录了,但没有访问当前视图的权限
                                 $location.path('/');
                             } else {
                                 $location.path('/login');
                             }
                         }
                     });
                 });
                 3. 发送经过身份验证的请求

                 当我们通过了身份验证,并取回了用户的授权令牌后,就可以在向服务器发送请求时使用令
             牌。同前面内容介绍的一样,我们希望服务器可以根据这个唯一的令牌对用户进行验证。从服务
             器的角度看,当收到一个带有令牌的请求时,验证令牌的有效性是服务器的责任之一。

                 如果提供的令牌是合法的,且与一个合法用户是关联的状态,那服务器就会认为用户的身份
             是合法且安全的。

                     通过令牌进行身份验证的安全性取决于通信所采用的通道,因此尽可能地使用SSL
                 连接可以提高安全性。

                 如果用户已经通过了身份验证,可以在发送请求时单独给每个请求都加入验证信息,或者把
             令牌附加到所有的请求中。
                 手动使用身份令牌 手动创建一个可以发送令牌的请求,只要将token当作参数或请求头添加
             到请求中即可。例如,如果我们想对服务器发出一个请求,此时我们正在这个服务器上通过
             Backend服务请求用户分析数据:

                 angular.module('myApp', [])
                 .service('Backend', function($http, $q, $rootScope, Auth) {
                     this.getDashboardData = function() {
                         $http({
                             method: 'GET',
                             url: 'http://myserver.com/api/dashboard'
                         }).success(function(data) {
                             return data.data;
                         }).catch(function(reason) {
                             $q.reject(reason);
                         });
                     };
                 });
                 简单地将token当作参数(或请求头)发送就可以进行令牌验证:

                 angular.module('myApp', [])
                 .service('Backend', function($http, $q, $rootScope, Auth) {
                     this.getDashboardData = function() {
                         $http({
                             method: 'GET',
                             url: 'http://myserver.com/api/dashboard',
                             params: {
                                 token: Auth.getToken()
                         }).success(function(data) {
                             return data.data;
                         }).catch(function(reason) {
                             $q.reject(reason);
   179   180   181   182   183   184   185   186   187   188   189