Observables de RxJs: ejecutar retryCuando después de algunas solicitudes asíncronas más
Mi caso de uso es:
El usuario solicita un activo de nuestra API que falla debido a que JWT caduca (se pasa como una cookie httpOnly): la API devuelve un código de estado 401.Vamos y los autenticamos (sin que el usuario haga nada) nuevamente usando un refresh_token para recuperar un nuevo JWT con una solicitud de nuestro cliente para auth0.Enviamos ese nuevo JWT a nuestra API para que se configure como una cookie httpOnly para reemplazar la caducada.Luego, queremos volver a intentar la solicitud original que el usuario hizo a la API en el paso 1.Estoy tratando de usar Observables dentro de mi aplicación Redux conredux-observable. Si puede pensar en otra forma de hacer que el flujo de usuarios anterior funcione, me encantaría saber cómo.
NÓTESE BIEN. Estoy usandorxjs V5
export const fetchAssetListEpic = (action$, store) => {
return action$.ofType('FETCH_ASSET_LIST')
.switchMap( action => {
const options = {
crossDomain: true,
withCredentials: true,
url: uriGenerator('assetList', action.payload)
};
return ajax(options);
})
.map(fetchAssetListSuccess)
.retryWhen(handleError)
.catch(redirectToSignIn);
};
function handleError(err) {
return (err.status === 401) ?
/* Authenticate here [Step 2] */
/* Send new JWT to API [Step 3] */
/* If successful make original request again [Step 4] */
:
Observable.throw(err);
}
function redirectToSignIn() {
/*I will redirect here*/
}
Hasta ahora he podido completar los pasos 1, 2 y 3, pero no estoy muy seguro de cómo agregar el paso 4. ¡Puedo estar completamente fuera de lugar, pero cualquier ayuda sería genial!