2.4.1 AngularJS 应用身份认证的技巧&$http拦截器 - OhNaNaSun/angularBlog GitHub Wiki

AngularJS 应用身份认证的技巧

Angular $http拦截器介绍与使用

$httpProvider中有一个 interceptors 数组,而所谓拦截器只是一个简单的注册到该数组中的常规服务工厂。

http拦截器一般通过定义factory的方式实现

  • request:此函数在$http向Server发送请求之前被调用,在此函数中可以对成功的http请求进行处理,其包含一个http config对象作为参数,这里对config对象具有完全的处理权限,甚至可以重新构造,然后直接返回此对象或返回包含此对象的promise即可。如果返回有误,会造成$http请求失败。如开发中经常需要在请求头中加入token以便验证身份,我们可以作如下处理:
 request: function(config) {
     config.headers = config.headers || {};
     if ($window.sessionStorage.token) {
         config.headers['X-Access-Token'] = $window.sessionStorage.token;
     }
    return config || $q.when(config);
 }
  • requestError:此方法会在前一个拦截器抛出异常或进行了reject操作时被调用,在这里可以进行恢复请求的操作,或者进行一些对于请求时发起动作的处理(如取消loading等);

  • response:此函数在$http从Server接收到响应时被调用,在此函数中可以对成功的http响应进行处理,这里具有对响应的完全处理权限,甚至可以重新构造,然后直接返回响应或返回包含响应的promise即可。如果返回有误,会造成$http接收响应失败;

  • responseError:此方法会在前一个拦截器抛出异常或进行了reject操作时被调用,在这里可以进行恢复响应的操作,进行一些针对错误的处理。