手柄角401个回应

手柄角401个回应

问题描述:

我有简单的API和授权点手柄角401个回应

当我请求API,我收到了401如果令牌是无效的(令牌失去有效性过去五分钟)。

我知道我可以拦截401例如与

app.factory("HttpErrorInterceptorModule", ["$q", "$rootScope", "$location", 
    function($q, $rootScope, $location) { 
     var success = function(response) { 
      // pass through 
      return response; 
     }, 
      error = function(response) { 
       if(response.status === 401) { 
        // dostuff 
       } 

       return $q.reject(response); 
      }; 

     return function(httpPromise) { 
      return httpPromise.then(success, error); 
     }; 
    } 
]).config(["$httpProvider", 
    function($httpProvider) { 
     $httpProvider.responseInterceptors.push("HttpErrorInterceptorModule"); 
    } 
]); 

,但我想捕捉和排队的请求并显示一个登录表单,如果是,则成功改变令牌(这是一个头),并再次执行请求

你可以用另一种方式使用$ httpInterceptor。如果您想要在用户登录后将用户重定向到用户实际失败的页面,则需要在某些服务中缓存失败的请求,然后在登录后将某个用户重定向到某处(我的逻辑连接到您的登录信息)。

但是你可能需要有一些测试终点,以防止无限制地访问你的控制器,你可能想使用决心https://thinkster.io/egghead/resolve/ 因此,在这种情况下,您会收到限制访问proctedted点,但不给你的页面连接错误。

为了解决这个问题,我使用标记参数(或标题)来找出登录后我应该重定向用户的位置。

这里是你的httpInterceptor的例子。

angular.factory('httpInterceptor', function ($q, $rootScope, $log, someService) { 
    return { 
     request: function (config) { 
      return config || $q.when(config) 
     }, 
     response: function (response) { 
      return response || $q.when(response); 
     }, 
     responseError: function (response) { 
      if (response.status === 401) { 
       //here I preserve login page 
       someService 
        .setRestrictedPageBeforeLogin(
          extractPreservedInfoAboutPage(response) 
        ) 
       $rootScope.$broadcast('error') 
      } 
      return $q.reject(response); 
     } 
    }; 
}) 
.config(function ($httpProvider) { 
    $httpProvider.interceptors.push('httpInterceptor'); 
}); 
+0

请问您可以添加解释吗?以及如何排队请求 – rkmax 2014-09-22 16:49:42

+0

关于请求的队列我会把它们放到缓存中,一些对象失败请求,然后重定向,然后成功登录后检索。我会在15分钟内解决答案。 – Artemis 2014-09-22 16:59:52

+0

如果我在'request'函数中存储'configs.push(config)'每个配置并在'response'函数'configs.pop()'中弹出,我如何识别每个响应属于请求? – rkmax 2014-09-22 17:38:04

角HTTP的身份验证模块提供拦截请求和queques他们重新给他们后,一旦用户登录的服务。

此服务火灾也是这些事件的下面,所以你可以听他们和决定如何在屏幕上显示

  • 事件:AUTH-loginRequired
  • 事件:AUTH-loginCancelled
  • 事件:AUT-loginConfirmed

看代码。它只有几行代码

https://github.com/witoldsz/angular-http-auth