更改现有的$ http请求拦截器

时间:2014-09-30 07:59:05

标签: angularjs angularjs-http

在我的角应用程序中,我有一个名为' authInterceptor'的$ http请求拦截器。我这样创作:

.factory('authInterceptor', function ($q, $window, EXT_API_BASE, $injector) {
return {
  request: function (config) {

    if (config.url.indexOf(EXT_API_BASE) !== -1){
      var Auth = $injector.get('Auth');
      if(Auth.user && Auth.user.token){
        config.headers.Authorization = 'Web ' + Auth.user.token;
      }
    }

    return config;
  }
}});

它在.config()中注册:

$httpProvider.interceptors.push('authInterceptor');

如您所见,我的Authorization标头绑定到Auth.user.token值。我的用户登录后可以使用此值。

然后发送标题用于对我的api的任何调用。

我面临的问题是......当用户在我的角度应用程序中注销时,即使我已经删除了Auth.user.token,仍然会发送Authorization标头。

在页面的硬刷新时,授权标题会被完全删除。

我如何确保' authInterceptor'我的用户退出时注册令牌值的变化?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。在叹息时改变了Auth.user对象的新手错误:

Auth.user = {}

创建了一个新对象,而requestInterceptor仍然引用了旧对象。

正确的做法是:

delete Auth.user.token