RxJs Observables: execute retryWhen depois de mais algumas solicitações assíncronas
Meu caso de uso é:
O usuário solicita ativos de nossa API que falham devido à expiração do JWT (transmitido como um cookie httpOnly) - a API retorna um código de status 401.Nós os autenticamos (sem que o usuário faça nada) novamente usando um refresh_token para recuperar um novo JWT com uma solicitação do nosso cliente para auth0.Enviamos esse novo JWT para nossa API para ser definido como um cookie httpOnly para substituir o expirado.Em seguida, queremos tentar novamente a solicitação original que o usuário fez na API na etapa 1.Estou tentando usar o Observables no meu aplicativo Redux comobservável em redux. Se você puder pensar em outra maneira de fazer o fluxo do usuário acima funcionar, ficarei feliz em saber como.
NB. Estou a usarrxjs 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*/
}
Até agora, consegui concluir as etapas 1, 2 e 3, mas não tenho muita certeza de como adicionar a etapa 4. Posso estar completamente enganado, mas qualquer ajuda seria ótima!