2017-01-22 1 views
1

Ich bin eine "gesicherte" Anwendung und Verwendung von Redux-Saga zusammen mit fetchjs für die asynchronen Aufrufe an das Back-End.Automatische Handle 401 Antwort mit Redux-Saga und holen

My Back-End gibt einen Statuscode 401, wenn der Benutzer nicht berechtigt ist, ich will diese „Ausnahme“ fangen global und lösen Sie eine Aktion so meine reagieren Anwendung zum Login-Bildschirm geht.

Ich fand die folgende Lösung: https://github.com/redux-saga/redux-saga/issues/110, aber in diesem Fall sollte die Handhabung für die 401 explizit in jeder Saga sein, die wir bauen.

Durch Hinzufügen von Code zu jeder Saga wird es komplexer. Es erhöht auch die Wahrscheinlichkeit, dass ein Entwickler vergisst, den Code für die Verarbeitung des 401-Codes hinzuzufügen.

Gibt es eine nette Möglichkeit, diese 401 Antwort global zu behandeln?

Antwort

2

ich nicht redux-saga verwenden würde, da es nicht die Fähigkeit hat zu tun, was Sie benötigen.

Stattdessen beim Einrichten von Speicher, API-Ebene und andere Dinge konfigurieren API-Ebene aufrufen Handler bei jedem Fehler aufgetreten.

Beispiel einer API-Schicht, die Berichte aufruft, um Fehlerhandler aufzurufen.

const conf = { 
    onError:() => {}, 
} 

api.onError = (cb) => { 
    conf.onError = cb; 
} 

api.get = (url) => { 
    fetch(url) 
     .then(response => { 
      if (response.ok === false) { 
       return conf.onError(response); 
      } 
      return response; 
     }) 
     // Network error 
     .catch(conf.onError) 
} 

Anwendung konfigurieren.

import store from './store'; 

// Configure your API wrapper and set error callback which will be called on every API error. 
api.onError((error) => { 
    store.dispatch({ 
     type: 'API_ERROR', 
     payload: error, 
    }); 
}); 

// In you reducers... 
isAuthorized(state, action) { 
    if (action.type === 'API_ERROR' && action.payload.statusCode === 401) { 
     return false; 
    } 
    return state; 
} 

Dann Aufruf API wie in der Regel, wenn Fehler auftritt, wird Aktion zu speichern versandt und Sie können oder können auf diese Aktionen nicht reagieren.

Verwandte Themen