2017-05-04 8 views
1

In meiner ionic 2 App habe ich 4 Dienste, die alle HTTP-Anfrage machen. Diese Dienste können von 8 verschiedenen Seiten in meiner App getroffen werden. Ich möchte den Fall behandeln, dass ein Autorisierungstoken abgelaufen ist oder entfernt wurde, oder eine Variation davon. Wenn also der Benutzer einen dieser Dienste antrifft und einen 401 Unauthorized-Fehler zurückgibt, wie gehe ich mit dem Fehler um und navigiere zu meiner Anmeldeseite, ohne Bedingungen auf allen 8 dieser Seiten, die die Dienste verwenden, zu setzen.Ionic 2 Navigation vom Dienst, wenn HTTP-Anfrage Autorisierung fehlschlägt

Noch einmal zu wiederholen: Ich würde lieber den Fehler behandeln, wo die Anfrage gemacht wird, im Service, und navigieren Sie zu meiner Login-Seite von dort, ist das möglich?

Gibt es bessere Möglichkeiten, damit umzugehen? Alle Beratung wäre willkommen.

Heres meinen gewünschten Strömungs:

  • Auf jeder Seite, stellen API-Anforderung von einem meiner Dienste (in Betrieb)
  • Wenn die Anforderung eine nicht autorisierte Fehler zurückgibt (in Betrieb)
    • klare Benutzerdaten (in Betrieb)
    • zur Login-Seite navigieren (in Betrieb)
  • Else (nehmen die Anfrage erfolgreich war)
    • Parse/die Daten in meiner Webseite (in Seite)
+0

Sie könnten nur einen Rückruf an den Dienst übergeben. Ich würde es vermeiden zu versuchen, den Nav-Controller an den Dienst zu übergeben. Cleaner wäre, nur einen Rückruf zu übergeben, der zum Dienst –

+1

navigiert Sie können ionic [Events] (https://ionicframework.com/docs/api/util/Events/) also im Service verwenden, wenn die Anfrage einen nicht autorisierten zurückgibt Fehler, Sie können ein Ereignis veröffentlichen (Benutzer: nicht autorisiert) und in der Datei app.component.ts können Sie dieses Ereignis behandeln, indem Sie den Benutzer auf die Anmeldeseite umleiten. Auf diese Weise müssen Sie das Ereignis nur im Service veröffentlichen und nur in der Datei app.component.ts abonnieren. Wenn Sie denken, dass das funktionieren könnte, lassen Sie es mich wissen und ich kann eine Antwort mit weiteren Details hinzufügen. – sebaferreras

+1

@sebaferreras Das habe ich getan. – Everett

Antwort

0

Sie Interceptor verwenden können Statuscode zu überprüfen und, wenn Antwort kommt 401, Umleitung zur Anmeldeseite. Ich hoffe, Sie müssen Interceptor Implementierung kennen

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 muss HTTP erweitern und eine InterceptorHttp-Factory erstellen, um dies in eckigen 2/ionischen 2 zu erreichen. Irgendwelche eingebauten Möglichkeiten, dies zu tun? – Everett

Verwandte Themen