【问题标题】:Change an existing $http request interceptor更改现有的 $http 请求拦截器
【发布时间】:2014-09-30 16:17:29
【问题描述】:

在我的 Angular 应用程序中,我创建了一个名为“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 的任何调用发送标头。

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

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

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

【问题讨论】:

    标签: angularjs angularjs-http


    【解决方案1】:

    回答我自己的问题。在叹息时犯了一个像这样更改 Auth.user 对象的新手错误:

    Auth.user = {}
    

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

    正确的做法是:

    delete Auth.user.token
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      相关资源
      最近更新 更多