2017-05-04 147 views
1

在我的离子2应用程序中,我有4个服务都提出了http请求。这些服务可以从我的应用程序中的8个不同页面中击中。我想处理授权令牌已过期或被删除的情况或任何变化。因此,如果用户点击其中一个服务,并且它返回401 Unauthorized错误,那么我如何处理错误并导航到我的登录页面,而无需对使用这些服务的所有页面中的所有8个条件进行条件。当http请求授权失败时,Ionic 2从服务导航

要重申:我宁愿处理服务中发出请求的错误,并从那里导航到我的登录页面,这可能吗?

有没有更好的方法来处理这个问题? 任何意见将不胜感激。

继承人我期望的流量:

  • 在任何网页上,从我的服务之一(服务)
  • 使API请求,如果该请求返回一个未经授权的错误(服务)
      (服务中)
    • 明确用户数据
    • 导航到登录页面(服务中)
  • 否则,(假设请求成功)
    • 解析/在我的页面中使用数据(页面)
+0

你可以传递一个回调给服务。我会避免试图通过导航控制器来服务。清理者只需传递一个导航到服务的回调 –

+1

如果请求返回未授权的请求,则可以在服务中使用ionic [Events](https://ionicframework.com/docs/api/util/Events/)错误,您可以发布一个事件(用户:未授权),在app.component.ts文件中,您可以通过将用户重定向到登录页面来处理该事件。这样你只需要在服务中发布事件,并且只需在app.component.ts文件中订阅即可。如果您认为这可行,请告诉我,我可以添加更多详细信息的答案。 – sebaferreras

+1

@sebaferreras这就是我最终做的。 – Everett

回答

0

您可以使用拦截器来检查状态代码,如果响应来401,重定向到登录页面。我希望你一定知道拦截器的实现

angular 
    .module('myProject.myModule') 
    .config(['$httpProvider', function ($httpProvider) { 

$httpProvider.interceptors.push(['$q', '$location', function ($q, $location) { 
     return { 
      'responseError': function(response) { 
       if(response.status === 401) { 
        $location.path('/login'); 
       } 
       if(response.status === 200) { 
        return $q.resolve(response); 
       } 
       return $q.reject(response); 
      } 
     }; 
    }]); 
}]); 
+0

Id必须扩展http并创建一个interceptorHttp工厂,以在角2 /离子2中实现这一点。任何内置的方式来做到这一点? – Everett

相关问题