2017-05-04 145 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

相關問題