我的用例是:
- 用户从我们的 API 请求资产,但由于 JWT 过期(作为 httpOnly cookie 传递)而失败 - API 返回 401 状态代码。
- 我们再次使用 refresh_token 对它们进行身份验证(无需用户做任何事情),以检索来自客户端对 auth0 的请求的新 JWT。
- 我们将新的 JWT 发送到我们的 API 以设置为 httpOnly cookie 来替换过期的。
- 然后,我们想重试用户在步骤 1 中对 API 发出的原始请求。
我正在尝试通过redux-observable在我的 Redux 应用程序中使用 Observables 。如果您能想到另一种使上述用户流工作的方法,我会很高兴听到如何。
注意。我在用着rxjs 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*/
}
到目前为止,我能够完成步骤 1、2 和 3,但不太确定添加步骤 4 的方法。我可能完全不合时宜,但任何帮助都会很棒!