0

每次我发出请求时,我都想在标头中传递我的令牌。我现在的做法是使用:

$http.defaults.headers.common['auth_token'] =  $localStorage.token;

我怎么能这样做才能将其发送到每个请求,并且当它抛出错误时它应该执行

$state.go('login')
4

1 回答 1

2

如果您想将令牌添加到每个请求并响应任何错误,那么最好的选择是使用 Angular HTTP 拦截器。

根据您的需要,它可能看起来像这样:

$httpProvider.interceptors.push(function ($q, $state, $localStorage) {
  return {

    // Add an interceptor for requests.
    'request': function (config) {
      config.headers = config.headers || {}; // Default to an empty object if no headers are set.

      // Set the header if the token is stored.
      if($localStorage.token) {
        config.headers.common['auth_token'] = $localStorage.token;
      }

      return config;
    },

    // Add an interceptor for any responses that error.
    'responseError': function(response) {

      // Check if the error is auth-related.
      if(response.status === 401 || response.status === 403) {
        $state.go('login');
      }

      return $q.reject(response);
    }

  };
});

希望这可以帮助。

于 2015-06-21T14:57:58.243 回答