Angular2 http " retry-Logik

Habe ich eine API mit token-basierte Authentifizierung-Mechanismus. Nach erfolgreicher signin Speicher ich zwei Token im browser das lokale storage - access-und refresh-Tokens.
Das access token enthält alle erforderlichen Informationen zur Autorisierung eines Benutzers auf der server-Seite und es hat Ablaufdatum.
Wenn der access-token ist abgelaufen, der client kann die Anforderung eines neuen access-token mit refresh-token und in der Antwort wird es ein paar neue tokens.

In den Winkel-1.x die Umsetzung ist ziemlich einfach und unkompliziert. Zum Beispiel könnten wir Abfangjäger:

httpInterceptor.$inject = ['$httpProvider'];
function httpInterceptor($httpProvider) {
  $httpProvider.interceptors.push(handleStaleAccessToken);

  handleStaleAccessToken.$inject = ['$q', '$injector', 'session'];
  function handleStaleAccessToken($q, $injector, session) {

    function logoutAndRedirect() {
      var authenticationRedirect = $injector.get('authenticationRedirect');
      session.destroy();
      authenticationRedirect.toLoginPage();
    }

    return {
      responseError: function(rejection) {
        //Do nothing for non 403 errors
        if (rejection.status !== 403) {
          return $q.reject(rejection);
        }

        var errorCode = rejection.data.error && rejection.data.error.code;
        if (errorCode === 'access_token_expired') {
          var $http = $injector.get('$http');

          //Refresh token
          var params = { refreshToken: session.getRefreshToken() };
          return $http.post('/api/auth/refresh', params).then(function(response) {
            session.setTokens(response.data);
            //Re try failed http request
            return $http(rejection.config);
          }).catch(function(error) {
            logoutAndRedirect();
            return $q.reject(error);
          });
        } else {
          logoutAndRedirect();
        }

        return $q.reject(rejection);
      }
    };
  }
}

Aber, wie bei der Durchführung ähnlicher Logik im Winkel 2 /rxjs app?

InformationsquelleAutor luacassus | 2016-04-15
Schreibe einen Kommentar